带有 protobuf 文件的 grpc 的典型组织
typical organization of grpc with protobuf files
我正在使用 gRPC 在服务和 protobuf 序列化之间进行通信。我以前没有真正使用过 RPC,我想知道原型文件的最佳结构是什么?目前,我在一个产品中拥有所有原型文件,具有以下示例布局:
protos/
identity/
models/
Member.proto
MemberService.proto
vault/
models/
Authentication.proto
Session.proto
HttpHeader.proto
AuthenticationService.proto
我认为我应该将模型与实际服务定义分开,这样我就可以导入单个模型而不需要整个服务。
然后,每个服务有如下布局
synatx "proto3";
import "models/Session.proto"
message GetRequest {
uint64 member_id;
}
message GetResponse {
Session session;
}
rpc AuthenticationService {
get (GetRequest) returns (GetResponse);
}
有没有更规范的方法来做到这一点?我应该在与我的服务相同的文件中包含模型 "message" 定义吗? import "../protos-gen/AuthenticationService.grpc.h
只使用一个 Authentication.proto
模型似乎很奇怪。
通常,人们将服务定义放在消息原型旁边。只有当原型变得非常大时,人们才会将它们分解,但即使是这种情况也很少见。
构建原型的规范方法是拥有一个单一的高级根目录,并通过绝对路径引用所有原型,甚至是同一目录中的兄弟。将服务与消息类型分开的主要原因是生成的代码是否变得太大。这并不常见。
我正在使用 gRPC 在服务和 protobuf 序列化之间进行通信。我以前没有真正使用过 RPC,我想知道原型文件的最佳结构是什么?目前,我在一个产品中拥有所有原型文件,具有以下示例布局:
protos/
identity/
models/
Member.proto
MemberService.proto
vault/
models/
Authentication.proto
Session.proto
HttpHeader.proto
AuthenticationService.proto
我认为我应该将模型与实际服务定义分开,这样我就可以导入单个模型而不需要整个服务。
然后,每个服务有如下布局
synatx "proto3";
import "models/Session.proto"
message GetRequest {
uint64 member_id;
}
message GetResponse {
Session session;
}
rpc AuthenticationService {
get (GetRequest) returns (GetResponse);
}
有没有更规范的方法来做到这一点?我应该在与我的服务相同的文件中包含模型 "message" 定义吗? import "../protos-gen/AuthenticationService.grpc.h
只使用一个 Authentication.proto
模型似乎很奇怪。
通常,人们将服务定义放在消息原型旁边。只有当原型变得非常大时,人们才会将它们分解,但即使是这种情况也很少见。
构建原型的规范方法是拥有一个单一的高级根目录,并通过绝对路径引用所有原型,甚至是同一目录中的兄弟。将服务与消息类型分开的主要原因是生成的代码是否变得太大。这并不常见。