<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Go - 關(guān)于 proto 文件的一點(diǎn)小思考?

          共 1619字,需瀏覽 4分鐘

           ·

          2021-12-18 14:13

          文章目錄:

          • 前言

          • helloworld.proto

          • 小思考

          • 小結(jié)

          • 推薦閱讀


          前言

          ProtoBuf 是什么?

          ProtoBuf 是一套接口描述語言(IDL),通俗的講是一種數(shù)據(jù)表達(dá)方式,也可以稱為數(shù)據(jù)交換格式。

          我們常用的數(shù)據(jù)格式有 JSONXML,為什么使用 ProtoBuf ?是因?yàn)樗膫鬏斂?,為什么傳輸快?大家可以找下資料。使用 .proto 文件進(jìn)行描述要序列化的數(shù)據(jù)結(jié)構(gòu),然后將寫好 .proto 文件使用 protoc 就可以很容易編譯成眾多計(jì)算機(jī)語言的接口代碼。


          gRPC 是什么?

          gRPC 是開源的 RPC 框架,已支持主流的計(jì)算機(jī)語言,可以通過 ProtoBuf 進(jìn)行定義接口,可以基于 ProtoBuf 進(jìn)行數(shù)據(jù)傳輸。

          兩者雖然是一家,但是分別解決不同的問題,可以配合使用,也可以分開。


          看一下的 gRPC helloworld 的 proto 文件是如何定義的?

          helloworld.proto

          syntax?=?"proto3";

          package?helloworld;

          option?go_package?=?"./;helloworld";

          //?The?greeting?service?definition.
          service?Greeter?{
          ??//?Sends?a?greeting
          ??rpc?SayHello?(HelloRequest)?returns?(HelloReply)?{}
          }

          //?The?request?message?containing?the?user's?name.
          message?HelloRequest?{
          ??string?name?=?1;
          }

          //?The?response?message?containing?the?greetings
          message?HelloReply?{
          ??string?message?=?1;
          }

          文件中定義了一個(gè) service Greeter 和 rpc SayHello 方法。

          入?yún)ⅲ?code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;">string name

          出參:string message


          這些過于簡單,還能不能描述其他信息?

          小思考

          1. 定義的 rpc 方法能否也同時(shí)支持 HTTP 調(diào)用?例如:SayHello 方法,既支持 gRPC 調(diào)用,也支持 HTTP 調(diào)用,同時(shí)支持 protoc 生成代碼時(shí),同時(shí)也生成 Swagger 接口文檔。

          2. 定義的入?yún)⒛芊裰С謪?shù)驗(yàn)證?例如:name 長度不能大于 20 個(gè)字符。

          3. 定義的 service Greeter 服務(wù)能否支持?jǐn)r截器?例如:該服務(wù)下的所有方法需要進(jìn)行登錄令牌驗(yàn)證。

          4. 定義的 rpc SayHello 方法能夠支持?jǐn)r截器?例如:當(dāng)前方法支持開啟和關(guān)閉是否記錄日志。

          小結(jié)

          以上問題還未完全解決,學(xué)習(xí) gRPC 感覺有些吃力...?

          大家有沒有可以推薦的學(xué)習(xí)資源?目前在看 grpc-gateway[1]

          推薦閱讀

          參考資料

          [1]

          grpc-gateway: https://github.com/grpc-ecosystem/grpc-gateway



          推薦閱讀


          福利

          我為大家整理了一份從入門到進(jìn)階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門看什么,進(jìn)階看什么。關(guān)注公眾號(hào) 「polarisxu」,回復(fù)?ebook?獲??;還可以回復(fù)「進(jìn)群」,和數(shù)萬 Gopher 交流學(xué)習(xí)。

          瀏覽 34
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲热视频在线观看 | 成人三级在线播放 | 欧美性精品性爱第一页 | 色九 | 国产va在线观看 国产乱伦小说视频 |