我目前正在玩Google Protocol Buffers的v3.0.0-alpha-2。Protocol Buffers(protobuf)v3.0.0-alpha-2中的可選字段和約束
據我所知,v3刪除了required
關鍵字,extensions
關鍵字和字段的默認值,以簡化原語言。
什麼我不明白是在proto3 optional
關鍵字的含義。
例子:
syntax = "proto3";
package fw.example;
message ExampleMessage {
optional string optional_string = 1;
string normal_string = 2;
}
問題:是什麼optional_string
和normal_string
除了名稱和標籤之間的區別?
我已經閱讀下面的資源(他們似乎是唯一公開 產品尚未推出了的protobuf的V3):
但他們並不甚至提到了optional
關鍵字。
- 是
optional
在proto3中已經過時了,因爲字段總是可選的嗎? - 如果
required
消失,如何使用proto3強制執行必填字段?
似乎在proto3中,人們不能再區分未設置的字段和由客戶端設置的(隱式)默認值的 字段。
將每個proto3消息包裝在特定於語言的類中是否是最佳做法? 我正在使用C++,我需要確保設置了特定的字段。看起來 驗證必須現在在特定於語言的源代碼中手動完成,在 與proto2對比。
有人能夠啓發我,對原始消息應用約束的最佳方法是什麼,但允許方案進化?目前,我認爲必須圍繞proto3消息編寫新的API ,以便客戶端不直接使用proto3生成的代碼直接處理 ,而是使用自定義API代碼。那 是否正確?
也許有人可以給我一個具體的例子來討論。
我很困惑,因爲下面是V3的發行說明中指出:
我們建議新的Protocol Buffers的用戶使用proto3。但是,我們不推薦 由於 API不兼容而推薦現有用戶從proto3遷移到proto3,並且我們將繼續長期支持proto2。
如果proto3是要走的路,爲什麼事情複雜?在我看來,我現在需要編寫比proto2更多的代碼。
如果你的代碼是用於生產用途的,我認爲我會堅持版本2,直到所有的錯誤和文檔錯誤已被解決 –
@RichardHodges,但proto3的json序列化是Oooh-So-sweet! – drozzy