2013-04-13 133 views
4

我正在构建一个由模块/应用程序组成的分布式系统,其接口由protobuf消息定义。公开协议缓冲区接口

将这些protobuf消息直接公开给客户是否是一个好主意? ......或者最好是准备一个共享库,它将负责翻译(让我们假设)基于方法的接口到基于每个模块的protobuf,而客户端根本不会意识到protobuf?

回答

5

它既不是一个“好主意”,也不是一个坏主意。这取决于您是否想要将协议缓冲区强加到您的消费者身上。那么这个决定的很大一部分是:

  • 谁是你的消费者?你介意把protobuf细节暴露给他们吗?
  • 客户是否会使用支持protobuf的语言编写?

我的0.02美元是这是Protocol Buffers的完美用例,因为它们是专门为跨系统,跨语言交换而设计的。 .proto文件对数据格式进行了简要的,语言无关且详尽的描述。当然,如果您决定采取这种方式,还有其他类似/竞争的格式&库需要考虑(请参阅:Thrift,Cap'n Proto,etc.)。

0

如果您计划定义采取谷歌的Protobuf消息类作为参数不是根据this和谷歌的的Protobuf文档中that部分是不直接暴露的Protobuf消息发送到客户端一个好主意接口。简而言之,对于Protobuf的每个版本,生成的代码很可能与旧代码不兼容。所以不要这样做!但是,如果您打算定义包含序列化Protobuf消息的字节数组作为函数/方法参数的接口,那么我完全同意Matt Ball的answer