小编典典

我可以定义一个带有空请求或响应的 grpc 调用吗?

all

proto3 中的 rpc 语法是否允许空请求或响应?

例如,我想要以下等价物:

rpc Logout;
rpc Status returns (Status);
rpc Log (LogData);

或者我应该只创建一个空类型?

message Null {};

rpc Logout (Null) returns (Null);
rpc Status (Null) returns (Status);
rpc Log (LogData) returns (Null);

阅读 64

收藏
2022-07-14

共1个答案

小编典典

Kenton 在下面的评论是合理的建议:

…作为开发人员,我们真的不擅长猜测我们未来可能想要什么。所以我建议通过始终为每个方法定义自定义参数和结果类型来确保安全,即使它们是空的。


回答我自己的问题:

查看默认的 proto
文件,我发现Empty与我上面建议的
Null 类型完全一样 :)

该文件的摘录:

// A generic empty message that you can re-use to avoid defining duplicated
// empty messages in your APIs. A typical example is to use it as the request
// or the response type of an API method. For instance:
//
//     service Foo {
//       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
//     }
//

message Empty {

}
2022-07-14