Google protobuf使用技巧和经验
Google protobuf是非常出色的開源工具,在項目中可以用它來作為服務間數據交互的接口,例如rpc服務、數據文件傳輸等。protobuf為proto文件中定義的對象提供了標準的序列化和反序列化方法,可以很方便的對pb對象進行各種解析和轉換。以下是我總結的protobuf使用技巧和經驗,分享給大家。由于公眾號尚未開通評論功能,抱歉暫時還不能評論交流。
?
技巧1:使用optional而不是required字段。
protobuf的可選字段optional是一個很巧妙的設計,optional字段是可選的,一個optional字段存在與否都不影響proto對象的序列化和反序列化,利用它可以實現數據協議的向后兼容和向前兼容,即以后增加新的字段,或棄用(注意這里是棄用而不是刪除)舊字段都不需要修改代碼。?
相比optional字段,requried字段要求字段必須存在,否則會導致proto解析失敗。一旦某個字段被設計為requried類型,將來隨著業務的快速發展可能會成為負擔,因此在使用requried類型時一定要慎重。?
?
技巧2:使用bytes而不是string字段。
這個技巧要感謝身邊好同事的建議和提醒,protobuf的bytes和string都能表示字符串,但是string類型會對字符串做utf8格式校驗,而bytes不會,因此使用bytes的編解碼效率更高。
?
技巧3:盡可能只維護一份proto文件。
世界上唯一不變的事情就是永遠在發生變化,精心設計好的proto文件也會隨著業務發展而改變。因此,工程中不提倡拷貝分發proto文件,而應通過提供git地址的方式只維護一份proto文件。?
?
技巧4:盡可能減少對其他proto文件的依賴。
proto應盡量獨立,在某些編程語言如lua中是不支持proto中嵌套其他proto這種方式的,需要手動修改以剔除外部proto依賴,或采用其他辦法解決。另外,減少對其他proto文件的依賴也有利于對proto的查看和理解。?
?
技巧5:利用開源工具實現proto和json的轉換。
protobuf的二進制可讀性不好,遠不如json的可讀性,工程中有很多地方都會涉及proto和json之間的轉換。假如你手頭上有一個很好用的json開發接口,現在要實現proto和json之間的相互轉換,一定要抵制住造輪子的沖動,而應該去找找json2pb這樣的開源工具。開源工具只需要幾行代碼就能搞定這樣的需求,又好又快,既能提高工作效率,又可以保證質量。?
?
更多技巧: 網上還有一些很好的關于protobuf的文章,例如protobuf和thrift之間的優缺點對比,protobuf的int壓縮設計,protobuf的使用例子,以及lua中解決proto文件嵌套其他proto文件的解決方法等等。學無止境,唯有一生勤勉。?
?
金句分享
開始時,我并不指望能夠學到多少東西。可是,讀完這本書后,我發現,我激勵自己的方式無意中促成了自我憎恨。由于認為自己"應該"做到許多事情,我不停的指責自己、命令自己、要求自己。這不可避免地導致內在的分裂與不滿。
——摘自《非暴力溝通》的“譯序”,作者馬歇爾·盧森堡博士,譯者阮胤華。
轉載于:https://www.cnblogs.com/zgwu/p/10403939.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Google protobuf使用技巧和经验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [BZOJ5292][BJOI2018]
- 下一篇: springBoot静态资源处理