2013-04-13 57 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