<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>

          擼了一個可調(diào)試 gRPC 的 GUI 客戶端

          共 1884字,需瀏覽 4分鐘

           ·

          2021-11-29 20:53

          先看一下成品效果:

          前言

          平時大家寫完 gRPC 接口后是如何測試的?往往有以下幾個方法:

          1. 寫單測代碼,自己模擬客戶端測試。

          2. 可以搭一個 gRPC-Gateway 服務(wù),這樣就可以在 postman 中進(jìn)行模擬。

          但這兩種方法都不是特別優(yōu)雅;第一種方法當(dāng)請求結(jié)構(gòu)體嵌套特別復(fù)雜時,在代碼中維護(hù)起來就不是很直觀;而且代碼會特別長。

          第二種方法在 postman 中與請求 HTTP 接口一樣,看起來非常直觀;但需要額為維護(hù)一個 gRPC-Gateway 服務(wù),同時接口定義發(fā)生變化時也得重新發(fā)布,使用起來稍顯復(fù)雜。

          于是我經(jīng)過一番搜索找到了兩個看起來還不錯的工具:

          • BloomRPC
          • https://github.com/fullstorydev/grpcui

          首先看 BloomRPC 頁面美觀,功能也很完善;但卻有個非常難受的地方,那就是不支持 int64 數(shù)據(jù)的請求, 會有精度問題。

          這里我寫了一個簡單的接口,直接將請求的 int64 返回回來。

          func?(o?*Order)?Create(ctx?context.Context,?in?*v1.OrderApiCreate)?(*v1.Order,?error)?{
          ?fmt.Println(in.OrderId)
          ?return?&v1.Order{
          ??OrderId:?in.OrderId,
          ??Reason:??nil,
          ?},?nil
          }

          會發(fā)現(xiàn)服務(wù)端收到的數(shù)據(jù)精度已經(jīng)丟失了。

          這個在我們大量使用 int64 的業(yè)務(wù)中非常難受,大部分接口都沒法用了。


          grpcui 是我在使用了 BloomRPC 一段時間之后才發(fā)現(xiàn)的工具,功能也比較完善; BloomRPC 中的精度問題也不存在。

          但由于我之前已經(jīng)習(xí)慣了在 BloomRPC 中去調(diào)試接口,加上日常開發(fā)過程中我的瀏覽器幾乎都是開了幾十個 tap 頁面,導(dǎo)致在其中找到 grpcui 不是那么方便。

          所以我就想著能不能有一個類似于 ?BloomRPC 的獨(dú)立 APP,也支持 int64 的工具。


          準(zhǔn)備

          找了一圈,貌似沒有發(fā)現(xiàn)。恰好前段時間寫了一個 gRPC 的壓測工具,其實(shí)已經(jīng)把該 APP 需要的核心功能也就是泛化調(diào)用實(shí)現(xiàn)了。

          由于核心能力是用 Go 實(shí)現(xiàn)的,所以這個 APP 最好也是用 Go 來寫,這樣復(fù)用代碼會更方便一些;正好也想看看用 Go 來實(shí)現(xiàn) GUI 應(yīng)用效果如何。

          但可惜 Go 并沒有提供原生的 GUI 庫支持,最后翻來找去發(fā)現(xiàn)了一個庫:fyne

          star 上看用的比較多,同時也支持跨平臺打包;所以最終就決定使用該庫在構(gòu)建這個應(yīng)用。

          核心功能

          整個 App 的交互流程我參考了 ?BloomRPC ,但作為一個不懂審美、設(shè)計的后端開發(fā)來說,整個過程中最難的就是布局了。

          這是我花了好幾個晚上調(diào)試出來的第一版頁面,雖然也能用但查看請求和響應(yīng)數(shù)據(jù)非常不方便。

          于是又花了一個周末最終版如下(乍一看貌似沒區(qū)別):

          雖然頁面上與 BloomRPC 還有一定差距,但也不影響使用;關(guān)鍵是 int64 的問題解決了;又可以愉快的擼碼了。

          安裝

          有類似需求也想體驗(yàn)的朋友可以在這里下載使用:https://github.com/crossoverJie/ptg/releases/download/0.0.2/ptg-mac-gui.tar

          由于我手上暫時沒有 Windows 電腦,所以就沒有打包 exe 程序;有相關(guān)需求的朋友可以自行下載源碼編譯:

          [email protected]:crossoverJie/ptg.git
          cd?ptg
          make?pkg-win

          后續(xù)計劃

          當(dāng)前版本的功能還比較簡陋,只支持常用的 unary 調(diào)用;后續(xù)也會逐步加上 streammetadata、工作空間的存儲與還原等支持。

          對頁面、交互有建議也歡迎提出。

          原本是準(zhǔn)備上傳到 brew 方便安裝的,結(jié)果折騰了一晚上因?yàn)閿?shù)據(jù)不夠被拒了,所以對大家有幫助或者感興趣的話幫忙點(diǎn)點(diǎn)關(guān)注(咋有種直播帶貨的感覺??)

          源碼地址:https://github.com/crossoverJie/ptg



          編寫一個接口壓測工具


          效率提高80%,Go開發(fā)必備的庫與工具!


          觀察者模式的實(shí)際應(yīng)用


          Go 中的 channel 與 Java BlockingQueue 的本質(zhì)區(qū)別



          點(diǎn)個在看你最好看


          瀏覽 50
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  欧美日韩免费在线视频 | 啪啪啪啪啪啪啪啪啪啪网 | 中文字幕一级毛片 | 欧美一级免费观看视频 | 国产又粗又长的视频 |