撸了一个可调试 gRPC 的 GUI 客户端
2021-11-29 18:03
996 查看
前言
平时大家写完
gRPC接口后是如何测试的?往往有以下几个方法:
-
写单测代码,自己模拟客户端测试。
-
可以搭一个
gRPC-Gateway
服务,这样就可以在postman
中进行模拟。
但这两种方法都不是特别优雅;第一种方法当请求结构体嵌套特别复杂时,在代码中维护起来就不是很直观;而且代码会特别长。
56c第二种方法在 postman 中与请求 HTTP 接口一样,看起来非常直观;但需要额为维护一个
gRPC-Gateway服务,同时接口定义发生变化时也得重新发布,使用起来稍显复杂。
于是我经过一番搜索找到了两个看起来还不错的工具:
首先看
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 }
会发现服务端收到的数据精度已经丢失了。
这个在我们大量使用 < ad8 code>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 cl ad8 one git@github.com:crossoverJie/ptg.git cd ptg make pkg-win
后续计划
当前版本的功能还比较简陋,只支持常用的
unary调用;后续也会逐步加上
stream、
metadata、工作空间的存储与还原等支持。
对页面、交互有建议也欢迎提出。
原本是准备上传到
brew方便安装的,结果折腾了一晚上因为数据不够被拒了,所以对大家有帮助或者感兴趣的话帮忙点点关注(咋有种直播带货的感觉🐶)
相关文章推荐
- 一个RPC服务客户端代理中间件的设计过程的回顾
- 一个不错的redis gui客户端
- 自己设计一个的轻量级的RPC框架--客户端netty
- Socket学习 - 撕开远程调用的逼格外衣(下)超简易仿制一个RPC客户端
- GUI网络编程--服务器每连接一个客户端就显示其信息
- 如何写一个RPC框架(二):利用Bean容器和动态代理简化客户端代码
- 使用Visual Studio的RPC调试功能同时调试COM程序的客户端和服务端
- 使用Visual Studio的RPC调试功能同时调试COM程序的客户端和服务端
- 如何写一个RPC框架(四):网络通信之客户端篇
- 推荐一个不错的IRC客户端基于Curses GUI
- 自己设计一个的轻量级的RPC框架--客户端Spring工厂Bean
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- 开发GUI程序时候调出一个CUI窗口用于调试
- 使用 RPC 调试来调试 COM 客户端和服务器
- eclipse根据WSDL生成客户端,再生成服务端报错, JAX-RPC 1.1 specification
- 我的Go语言学习之旅七:创建一个GUI窗口
- 类库,API以及相关代码编写调试等,RPC,边缘计算
- 远程桌面连接,“由于这台计算机没有终端服务器客户端访问许可证,远程会话被中断”的一个解决办法
- 一个客户端和一个服务器的多次通信
- 写博客的一个客户端工具