proto3中的rpc语法是否允许空请求或响应?
e.g。我想要相当于以下内容:
rpc Logout;
rpc Status returns (Status);
rpc Log (LogData);
或者我应该创建一个null类型?
message Null {};
rpc Logout (Null) returns (Null);
rpc Status (Null) returns (Status);
rpc Log (LogData) returns (Null);
答案 0 :(得分:109)
以下肯顿的评论是合理的建议:
......作为开发人员,我们很难猜测未来我们可能会想要什么。所以我建议通过为每个方法定义自定义参数和结果类型来保证安全,即使它们是空的。
回答我自己的问题:
查看默认的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 {
}
答案 1 :(得分:4)
您还可以使用预定义:
import "google/protobuf/empty.proto";
package MyPackage;
service MyService {
rpc Check(google.protobuf.Empty) returns (google.protobuf.Empty) {}
}
答案 2 :(得分:0)
您还可以在Reply结构内使用另一个bool属性。像这样
message Reply {
string result = 1;
bool found = 2;
}
因此,如果找不到结果或发生了某些错误,则可以从服务类中返回
return new Reply()
{
Found = false
};