带有 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 模型似乎很奇怪。

通常,人们将服务定义放在消息原型旁边。只有当原型变得非常大时,人们才会将它们分解,但即使是这种情况也很少见。

构建原型的规范方法是拥有一个单一的高级根目录,并通过绝对路径引用所有原型,甚至是同一目录中的兄弟。将服务与消息类型分开的主要原因是生成的代码是否变得太大。这并不常见。