公开协议缓冲接口

时间:2013-04-13 21:44:48

标签: interface protocol-buffers

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

将这些protobuf消息直接暴露给客户端是一个好主意吗? ...或者也许最好准备一个共享库,它将负责将(基于假设)基于方法的接口转换为基于每个模块的protobuf,客户根本不会了解protobuf?

2 个答案:

答案 0 :(得分:5)

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

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

我的0.02美元是这是Protocol Buffers的完美用例,因为它们是专为跨系统,跨语言交换而设计的。 .proto文件使数据格式简洁,语言无关,详尽。当然,还有其他类似/竞争格式&如果您决定沿着这条路走下去,可以考虑(见ThriftCap'n Protoetc.)。

答案 1 :(得分:0)

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

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