前言

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

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

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

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

第二种方法在 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
}

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

这个在我们大量使用 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

撸了一个可调试 gRPC 的 GUI 客户端的更多相关文章

  1. 推荐一个好的Redis GUI 客户端工具

    推荐一个好的Redis GUI 客户端工具 Redis Desktop Manager  

  2. MonjaDB —— 基于 Eclipse 的 MongoDB GUI 客户端工具(转载)

    原文链接http://www.oschina.net/question/12_59707 MonjaDB 是一个 MongoDB 的 GUI 客户端工具,提供直观的 MongoDB 数据管理的功能,支 ...

  3. 使用GIT进行源码管理——GUI客户端

    很多人对GIT GUI客户端是非常不屑一顾的,但我非常喜欢GUI的方便快捷,也不用记忆冗杂的命令,本文简单的介绍了几种免费的Windows下的GIT客户端,方便大家使用. Git for Window ...

  4. .NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端

    .NET Core love gRPC 千呼万唤的 .NET Core 3.0 终于在 9 月份正式发布,在它的众多新特性中,除了性能得到了大大提高,比较受关注的应该是 ASP.NET Core 3. ...

  5. 撸了一个 Feign 增强包 V2.0 升级版

    前言 大概在两年前我写过一篇 撸了一个 Feign 增强包,当时准备是利用 SpringBoot + K8s 构建应用,这个库可以类似于 SpringCloud 那样结合 SpringBoot 使用声 ...

  6. RabbitMQ GUI客户端工具(RabbitMQ Assistant)

    RabbitMQ GUI客户端工具(RabbitMQ Assistant) 平时用控制台或者网页进行管理不免有点不方便,尤其在读取消息的时候不支持过滤和批量发送消息,在此推荐一个漂亮的GUI客户端工具 ...

  7. Putty是一个专业的SSH连接客户端

    http://www.putty.ws/PuTTY-LinuxVPS Putty是一个专业的SSH连接客户端,当然可以用来连接Linux操作系统的VPS.下文是Putty连接工具的使用方法与详细教程, ...

  8. 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端

    接上文 多线程编程学习笔记——使用异步IO 二.   编写一个异步的HTTP服务器和客户端 本节展示了如何编写一个简单的异步HTTP服务器. 1.程序代码如下. using System; using ...

  9. 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore

    大家好 , 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 , 名字叫 HtmlCore  . 项目的一个主要目标是可以用 .Net 在 移动设备 上 开发 GUI 程序 (界面程 ...

随机推荐

  1. 初学python-day6 for循环和流程控制(已更新循环做三角形图形!!)

    for循环 1.格式 for    变量    in   集合: 循环体 2.概述 当程序执行for循环,按顺序从集合中获取元素变量保存当前循环得到的值,再去执行循环体.当集合中数据都被取完,则此刻跳 ...

  2. 【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志

    问题描述 在App Service For Windows的环境中,我们可以通过ArmClient 工具发送POST请求在Web应用的实例中抓取网络日志,但是在App Service For Linu ...

  3. Convolutional Neural Network-week1编程题(一步步搭建CNN模型)

    Convolutional Neural Networks: Step by Step implement convolutional (CONV) and pooling (POOL) layers ...

  4. [Beta]the Agiles Scrum Meeting 5

    会议时间:2020.5.19 20:00 1.每个人的工作 今天已完成的工作 成员 已完成的工作 issue yjy 为评测机增加更多评测指标 评测部分增加更多评测指标 tq 为评测机增加更多评测指标 ...

  5. (四)、Docker 镜像

    1.Docker镜像是什么? 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 2.Do ...

  6. CODING 助力江苏高速信息实现组织敏捷与研发敏捷,领跑智慧交通新基建

    疫情之下的高速公路管控重任 江苏高速公路信息工程有限公司(以下简称:江苏高速信息)成立于 2002 年,是江苏交通控股旗下,专业从事高速公路领域机电系统集成.智能交通软硬件研发.大数据分析运营的高新技 ...

  7. 三极管和MOS管驱动电路的正确用法

    1 三极管和MOS管的基本特性 三极管是电流控制电流器件,用基极电流的变化控制集电极电流的变化.有NPN型三极管(简称P型三极管)和PNP型三极管(简称N型三极管)两种,符号如下: MOS管是电压控制 ...

  8. 深入理解xLua基于IL代码注入的热更新原理

    目前大部分手游都会采用热更新来解决应用商店审核周期长,无法满足快节奏迭代的问题.另外热更新能够有效降低版本升级所需的资源大小,节省玩家的时间和流量,这也使其成为移动游戏的主流更新方式之一. 热更新可以 ...

  9. 两个栈实现队列 牛客网 剑指Offer

    两个栈实现队列 牛客网 剑指Offer 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. class Solution: def __init__(sel ...

  10. APP 自动化之系统按键事件(五)

    转载记录方便后续自己使用: 代码就一句driver.keyevent()括号内填入的是物理按键的数字代号 代号表: 电话键 KEYCODE_CALL 拨号键 5 KEYCODE_ENDCALL 挂机键 ...