前言
平时大家写完 gRPC
接口后是如何测试的?往往有以下几个办法:
- 写单测代码,本人模仿客户端测试。
- 能够搭一个
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
调用;后续也会逐渐加上 stream
、metadata
、工作空间的存储与还原等反对。
对页面、交互有倡议也欢送提出。
本来是筹备上传到
brew
不便装置的,后果折腾了一早晨因为数据不够被拒了,所以对大家有帮忙或者感兴趣的话帮忙点点关注(咋有种直播带货的感觉🐶)
源码地址:https://github.com/crossoverJie/ptg