相关疑难解决方法(0)

不带参数的Protobuf RPC Service方法

我正在尝试使用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),但在这种情况下,该方法不需要任何参数.是有办法做到这一点还是根本不支持?

protocol-buffers protorpc

35
推荐指数
2
解决办法
1万
查看次数

google.protobuf.Empty 对于向后兼容性有危险吗?

各州规范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 格式可以优雅地处理此问题?

protocol-buffers grpc

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

protocol-buffers ×2

grpc ×1

protorpc ×1