5

我正在构建一个分布式系统,该系统由具有由 protobuf 消息定义的接口的模块/应用程序组成。

将这些 protobuf 消息直接公开给客户端是个好主意吗?...或者最好准备一个共享库,该库负责将基于方法的接口转换为基于每个模块的 protobuf,并且客户端根本不知道 protobuf?

4

2 回答 2

7

这既不是“好主意”也不是坏主意。这取决于您是否要将协议缓冲区强加给您的消费者。该决定的很大一部分是:

  • 你的消费者是谁?你介意向他们公开 protobuf 的细节吗?
  • 客户端会用支持 protobuf 的语言编写吗?

我的 0.02 美元是协议缓冲区的完美用例,因为它们是专门为跨系统、跨语言交换而设计的。该.proto文件对数据格式进行了简洁、独立于语言的全面描述。当然,如果您决定走这条路,还有其他类似/竞争格式和库可供考虑(请参阅: ThriftCap'n Proto等)

于 2013-04-13T21:48:43.913 回答
0

如果您计划定义将 Google Protobuf 消息类作为参数的接口,而不是根据Google 的 Protobuf 文档中的这个那个部分,直接向客户端公开 Protobuf 消息不是一个好主意。简而言之,对于每个版本的 Protobuf,生成的代码都可能与旧代码不兼容。所以不要这样做!

但是,如果您打算定义将包含序列化 Protobuf 消息的字节数组作为函数/方法参数的接口,那么我完全同意 Matt Ball 的回答

于 2013-04-16T07:59:14.073 回答