目前我正在使用gRPC作为服务器之间的通信,但我不知道哪种模式最好。
我应该创建共享请求消息(UserRequest
被视为User
个对象):
service User {
rpc Create (UserRequest) returns (Reply) {}
rpc Update (UserRequest) returns (Reply) {}
rpc Delete (UserRequest) returns (Reply) {}
}
message UserRequest {
string username = 1;
string password = 2;
string email = 3;
string gender = 4;
string birthday = 5;
}
或者按照这样的方法创建一条消息来定义方法实际需要的字段?但由于这些方法使用了几乎相同的字段,这对我来说有点冗长。
service User {
rpc Create (CreateUserRequest) returns (Reply) {}
rpc Update (UpdateUserRequest) returns (Reply) {}
rpc Delete (DeleteUserRequest) returns (Reply) {}
}
message CreateUserRequest {
string username = 1;
string password = 2;
}
message UpdateUserRequest {
string username = 1;
string password = 2;
string email = 3;
string gender = 4;
string birthday = 5;
}
//...
答案 0 :(得分:2)
通常,为每个RPC创建不同的消息,以允许您单独扩展它们。有一些例外,但是当方法执行不同的操作(创建,更新,删除)时,它是不可能的。
作为与您的情况类似的示例,请查看pubsub:
rpc CreateSubscription(Subscription) returns (Subscription) {...}
rpc UpdateSubscription(UpdateSubscriptionRequest) returns (Subscription) {...}
rpc DeleteSubscription(DeleteSubscriptionRequest) returns (google.protobuf.Empty) {...}
我会注意到它使用google.protobuf.Empty
,我通常不建议您使用CreateSubscriptionRequest
,因为它会阻止进一步扩展。创建一个仅包含Subscription
的{{1}}也没关系。我希望他们不会让REST API感觉更自然(那些google.api.http
选项)。