乐趣区

关于golang:撸了一个可调试-gRPC-的-GUI-客户端

前言

平时大家写完 gRPC 接口后是如何测试的?往往有以下几个办法:

  1. 写单测代码,本人模仿客户端测试。
  2. 能够搭一个 gRPC-Gateway 服务,这样就能够在 postman 中进行模仿。

但这两种办法都不是特地优雅;第一种办法当申请构造体嵌套特地简单时,在代码中保护起来就不是很直观;而且代码会特地长。

第二种办法在 postman 中与申请 HTTP 接口一样,看起来十分直观;但须要额为保护一个 gRPC-Gateway 服务,同时接口定义发生变化时也得从新公布,应用起来稍显简单。

于是我通过一番搜寻找到了两个看起来还不错的工具:

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

首先看 BloomRPC 页面好看,性能也很欠缺;但却有个十分好受的中央,那就是不反对 int64 数据的申请, 会有精度问题。

这里我写了一个简略的接口,间接将申请的 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
}

会发现服务端收到的数据精度曾经失落了。

这个在咱们大量应用 int64 的业务中十分好受,大部分接口都没法用了。



grpcui 是我在应用了 BloomRPC 一段时间之后才发现的工具,性能也比较完善; BloomRPC 中的精度问题也不存在。

但因为我之前曾经习惯了在 BloomRPC 中去调试接口,加上日常开发过程中我的浏览器简直都是开了几十个 tap 页面,导致在其中找到 grpcui 不是那么不便。

所以我就想着能不能有一个相似于 BloomRPC 的独立 APP,也反对 int64 的工具。


筹备

找了一圈,貌似没有发现。恰好前段时间写了一个 gRPC 的压测工具,其实曾经把该 APP 须要的外围性能也就是泛化调用实现了。

因为外围能力是用 Go 实现的,所以这个 APP 最好也是用 Go 来写,这样复用代码会更不便一些;正好也想看看用 Go 来实现 GUI 利用成果如何。

但惋惜 Go 并没有提供原生的 GUI 库反对,最初翻来找去发现了一个库:fyne

star 上看用的比拟多,同时也反对跨平台打包;所以最终就决定应用该库在构建这个利用。

外围性能

整个 App 的交互流程我参考了 BloomRPC,但作为一个不懂审美、设计的后端开发来说,整个过程中最难的就是布局了。

这是我花了好几个早晨调试进去的第一版页面,尽管也能用但查看申请和响应数据十分不不便。

于是又花了一个周末最终版如下(乍一看貌似没区别):

尽管页面上与 BloomRPC 还有肯定差距,但也不影响应用;要害是 int64 的问题解决了;又能够欢快的撸码了。

装置

有相似需要也想体验的敌人能够在这里下载应用:
https://github.com/crossoverJie/ptg/releases/download/0.0.2/ptg-mac-gui.tar

因为我手上临时没有 Windows 电脑,所以就没有打包 exe 程序;有相干需要的敌人能够自行下载源码编译:

git clone git@github.com:crossoverJie/ptg.git
cd ptg
make pkg-win

后续打算

以后版本的性能还比拟简陋,只反对罕用的 unary 调用;后续也会逐渐加上 streammetadata、工作空间的存储与还原等反对。

对页面、交互有倡议也欢送提出。

本来是筹备上传到 brew 不便装置的,后果折腾了一早晨因为数据不够被拒了,所以对大家有帮忙或者感兴趣的话帮忙点点关注(咋有种直播带货的感觉🐶)

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

退出移动版