我正在尝试使用Google的Protocol Buffers来描述RPC服务
service WhoamiService {
rpc WhoAreYou() returns (Whoami) {}
}
message Whoami {
optional bytes request_id = 1;
optional string hostname = 2;
optional string message = 3;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译这个定义时,我得到一个Expected type name指向该WhoAreYou()片段的错误.
它工作正常,如果我取代WhoAreYou()用WhoAreYou(Whoami),但在这种情况下,该方法不需要任何参数.是有办法做到这一点还是根本不支持?
各州的规范google.protobuf.Empty:
您可以重复使用通用空消息,以避免在 API 中定义重复的空消息。一个典型的例子是将其用作API方法的请求或响应类型。
我一直在内部提倡使用空消息包装器来代替,以保持向后兼容性。例如,假设我们有一个FooService:
service Foo {
rpc List(google.protobuf.Empty) returns (ListResponse) {}
}
message ListResponse {
repeated Foo results = 1;
}
message Foo {...}
Run Code Online (Sandbox Code Playgroud)
如果将来我们需要向此列表请求添加分页,我们需要引入一个请求包装器:
message ListRequest {
int limit = 1;
int offset = 2;
}
Run Code Online (Sandbox Code Playgroud)
然后更新rpc签名:
rpc List(ListRequest) returns (ListResponse) {}
Run Code Online (Sandbox Code Playgroud)
这是向后不兼容的更改,还是 protobuf 格式可以优雅地处理此问题?