撸了一个可调试 gRPC 的 GUI客户端

网络 通信技术
由于核心能力是用 Go 实现的,所以这个 APP 最好也是用 Go 来写,这样复用代码会更方便一些;正好也想看看用 Go 来实现 GUI 应用效果如何。

[[437208]]

本文转载自微信公众号「crossoverJie」,作者crossoverJie 。转载本文请联系crossoverJie公众号。

前言

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

写单测代码,自己模拟客户端测试。

可以搭一个 gRPC-Gateway 服务,这样就可以在 postman 中进行模拟。

但这两种方法都不是特别优雅;第一种方法当请求结构体嵌套特别复杂时,在代码中维护起来就不是很直观;而且代码会特别长。

第二种方法在 postman 中与请求 HTTP 接口一样,看起来非常直观;但需要额为维护一个 gRPC-Gateway 服务,同时接口定义发生变化时也得重新发布,使用起来稍显复杂。

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

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

首先看 BloomRPC 页面美观,功能也很完善;但却有个非常难受的地方,那就是不支持 int64 数据的请求, 会有精度问题。

这里我写了一个简单的接口,直接将请求的 int64 返回回来。

  1. func (o *OrderCreate(ctx context.Context, in *v1.OrderApiCreate) (*v1.Order, error) { 
  2.  fmt.Println(in.OrderId) 
  3.  return &v1.Order
  4.   OrderId: in.OrderId, 
  5.   Reason:  nil, 
  6.  }, 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 程序;有相关需求的朋友可以自行下载源码编译:

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

后续计划

当前版本的功能还比较简陋,只支持常用的 unary 调用;后续也会逐步加上 stream、metadata、工作空间的存储与还原等支持。

对页面、交互有建议也欢迎提出。

原本是准备上传到 brew 方便安装的,结果折腾了一晚上因为数据不够被拒了,所以对大家有帮助或者感兴趣的话帮忙点点关注(咋有种直播带货的感觉??)

 

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

 

责任编辑:武晓燕 来源: crossoverJie
相关推荐

2021-07-28 11:46:51

工具gRPC客户端

2021-02-07 18:19:44

RabbitMQ客户端

2022-03-14 09:35:43

Pythonhttpx

2019-07-22 20:03:23

Docker操作系统Linux

2016-10-09 08:35:09

Linux桌面REST

2017-07-24 10:18:55

LinuxNylas Mail邮件客户端

2020-02-25 09:45:05

Dino开源XMPP

2020-11-04 07:56:19

工具Linux 翻译

2012-12-07 10:15:53

IBMdW

2020-05-22 22:48:01

GUI Git开发命令行

2022-02-20 23:15:46

gRPCGolang语言

2014-03-10 10:22:40

JavaScriptJS弊端

2014-10-27 15:21:40

程序员代码

2021-09-22 15:46:29

虚拟桌面瘦客户端胖客户端

2024-07-03 08:36:14

序列化算法设计模式

2022-06-14 15:07:04

IPC客户端服务端

2019-02-25 14:54:37

开源播客客户端gPodder

2017-06-05 14:27:56

MyCLIMySQLMariaDB

2021-11-04 17:23:03

Java对象 immutable

2009-03-06 17:04:06

LinuxMitterTwitter
点赞
收藏

51CTO技术栈公众号