1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        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)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            色噜噜在线观看 | 插逼逼视频网站 | 成人无码区免费视频网站入口 | 色婷婷啪啪 | 色中色在线视频 | 五月丁香婷婷啪啪 | 国产精品熟女无套高潮 | 久久网站五月天四虎 | 女生隐私无遮挡 | 91青青操 |