我有一个这样的gRPC API定义(来自Akka docs示例),但更长(仅service GreeterService {
rpc SayHello (HelloRequest) returns (HelloReply) {}
rpc ItKeepsTalking (stream HelloRequest) returns (HelloReply) {}
rpc ItKeepsReplying (HelloRequest) returns (stream HelloReply) {}
rpc StreamHellos (stream HelloRequest) returns (stream HelloReply) {}
}
部分有4000行)。
// file 1:
service GreeterServicePartA {
rpc SayHello (HelloRequest) returns (HelloReply) {}
rpc ItKeepsTalking (stream HelloRequest) returns (HelloReply) {}
}
// file 2:
service GreeterServicePartB {
rpc ItKeepsReplying (HelloRequest) returns (stream HelloReply) {}
rpc StreamHellos (stream HelloRequest) returns (stream HelloReply) {}
}
// main proto file:
import "file1"
import "file2"
service GreeterService = GreeterServicePartA + GreeterServicePartB
但是,RPC列表现在变得太长了,我想以某种方式将其“拆分”为多个文件,因此文件更具可读性。像这样
service GreeterService {
rpc SayHello = importedSayHello
rpc ItKeepsTalking = importedKeepsTalking
rpc ItKeepsReplying = importedKeepsReplying
rpc StreamHellos = importedStreamHellos
}
即使只是在不同文件中分别定义RPC,然后编写这样的内容也可以帮助我:
Froala editor
是否可以通过某种方式在gRPC原型定义中“组合”服务?
答案 0 :(得分:0)
您不应该提供那么大的服务。如果已经发展到4000行,这听起来像是所有方法的垃圾场。我希望其中大部分是文档...通常,我希望基于较大API的子集提供更多服务。例如,假设我有MyAndroidAppService,它可能成为垃圾场。但是我可以将其设计为MyAndroidAppConfigService,MyAndroidAppNotificationService,MyAndroidAppChatService(假设使用方法很多的非常复杂的应用程序)。
但是既然您已经已经有了这样的服务,您将如何处理?您不能将service
定义拆分为多个文件。而且,如果您将服务定义分为多个新服务,这将破坏gRPC的线路兼容性。
您最能做的就是将message
的定义移到一个单独的文件中,然后使用常规的import
mechanism。由于将消息移动到另一个文件可能会导致生成的代码中的API不兼容,因此可以改用import public "path/to/messages.proto"
。