专业技能提升:学会 gRPC 接口调试

liam
• 阅读 341

目前市面上能够兼容 gRPC 接口的接口调试与管理工具十分有限,而 gRPC 现已广泛应用于微服务架构中,并且可以预见的是,它会变得越来越流行。

作为业界领先的接口管理工具,Apifox 现已上线 gRPC 接口调试能力,全面兼容以下四种调用类型:

  • Unary:一元调用
  • Server Streaming:服务端流
  • Client Streming:客户端流
  • Bidirectional Streaming:双向流

也许你对 gRPC 接口还不太熟悉,那么我们不妨先来简单了解一下!

什么是 gRPC?

gRPC 是一个由谷歌开发的现代开源高性能 RPC 远程过程调用 ( Remote Procedure Calls) 框架,具备良好的兼容性,可在多个开发环境下运行。

gRPC 的应用场景

相较于目前主流的 HTTP API 接口,gRPC 接口采用了领先的 HTTP/2 底层架构设计作为底层传输协议,能够在大规模数据传输场景(例如视频流传输)和大量服务相互调用的微服务架构场景下大展身手。

数据交换采用轻量化的 Protobuf 序列化协议,使得它能够在资源受限场景(常见于手机等移动端设备)提供更快的数据处理速度的同时,减少网络传输的数据量并节省网络带宽,从而降低功耗并提升电池寿命。

在正式开始介绍 gRPC 之前,我们不妨先弄清楚到底什么是 RPC 以及它的作用,这对于后续的理解十分有帮助。

什么是 RPC?

RPC 协议是一种远程过程调用的实现方式。假设现在有两台服务器 A 和 B。部署在 A 服务器上的服务,想调用正在 B 服务器上运行的另一个进程。但由于双方服务并不在一个内存空间而导致无法直接调用,那么就必须通过网络通讯来达到调用效果。

专业技能提升:学会 gRPC 接口调试

要建立网络通讯无非是在传输层发起 TCP 连接。TCP 的握手机制确保了数据包能可靠地传输给对方,并且它具备以下三个特点:面向连接、可靠、基于字节流。前面两种特性都可以胜任这个场景,但唯独在基于字节流这一点恐怕值得商榷。为什么?

因为它没有边界。字节流本质上是在传输层双向通道中流淌的数据,也就是计算机能够理解的二进制 0 1 数据。所以当发送端使用 TCP 发送“南京市”+“长江大桥”字符时,接收端有可能收到的就是“南京市长”+“江大桥”,也有可能是“南京市长江大桥”等。

过于简单的 TCP 连接过程无法保证信息的唯一性和确定性,因此才需要在数据中定义消息头、消息体,并且发送方与接收方共同认可这套沟通方式,由此衍生出了HTTP 协议和 RPC 调用等方案,它们本质上都是对数据的传递和调用方式作出了规范化定义,避免出现信息失真

例如现在有一个购物网站,存在订单服务用户服务(例如账号管理) 两项微服务。订单服务需要查询到用户服务下的一些数据,但是两者相隔离。此时订单服务就必须通过远程调用的方式获取数据。

下图的示例中,服务端(用户服务) 仅需暴露出一个能够调用数据库的 getConsumerByld() 函数,客户端(订单服务) 使用 RPC 便能够像在本地中直接调用 getConsumerByld() 函数并获取到所需的响应结果。RPC 成功隐藏了内部通信的复杂性,为双方提供了稳定统一的接口,使得开发者只需要关注业务逻辑,而无需关注底层网络通信细节。

专业技能提升:学会 gRPC 接口调试

而 gRPC 本质上就是一种由谷歌发布并开源的 RPC 框架

gRPC 的优势有哪些?

先进的传输协议

HTTP/2 在 2015 年稍早于 gRPC 发布,因此 gRPC 很自然的将这一先进的传输协议作为底层基础,从而使得它具备更高效的传输性能,并且还能够支持流式调用,为许多实时数据传输场景(例如股票数据、语音通讯、游戏场景)提供支持,天然领先许多在千禧年之际发布的古早 RPC 框架。发起连接时会建立连接池,面对多条连接时能够显著提升网络请求性能。

科学的设计理念

同时 gRPC 采用了体积更小的 Protobuf 序列化协议保存结构体数据。Protocol Buffers 是一种跨语言、跨平台的数据结构序列化协议。相比 JSON 或 XML 协议,它更加轻量级,因此在传输数据时更加高效

同时这也决定了 gRPC 接口必定遵循 API First 理念,因为在开发工作开始前就需要在文件中定义服务接口,包含客户端如何使用服务、调用时所需传递的参数。gRPC 接口可以根据已定义的 .proto 文件自动生成客户端和服务端的通信方式,大大简化了开发过程

良好的兼容性

gRPC 不依赖于任何特定的技术或语言栈,因此可以被广泛地应用到不同的开发环境之中。它支持多种编程语言,包括 Java、C++、Python、Go 等现代流行的编程语言。它可以在轻松地不同语言之间进行通信,这为多语言的微服务架构提供了有力支持。

专业技能提升:学会 gRPC 接口调试

虽然 gRPC 有着许多优势,但是大部分外部使用者对于 HTTP 接口更加熟悉(这也导致了 gRPC 的生态繁荣度并不如 REST/HTTP 协议),因此 gRPC 主要的应用场景是团队内部微服务间的通讯与连接,并不适合将服务公开至外部使用。并且若想要成功调用 gRPC,还可能涉及到内部系统的参数传递过程。另一个比较大的缺点便是浏览器并不支持 gRPC 服务调用,需要借助扩展或专业的接口调用工具(比如说 Apifox)才能进行接口协作。

专业技能提升:学会 gRPC 接口调试

Apifox gRPC 接口调试功能

Apifox 目前已上线 gRPC 接口调试功能,我们将通过一个示例场景简要演示如何在 Apifox 中新建 gRPC 项目并针对接口发起调试。

注意:gRPC 接口管理功能要求 Apifox 版本号大于等于 2.3.0

在 Apifox 中点击「新建项目」按钮,选择 gRPC 类型,填写项目名称后轻点「新建」按钮。

专业技能提升:学会 gRPC 接口调试

导入定义 gRPC 接口所使用的服务、方法和消息的 .proto 文件。你可以将文件拖拽至其中或使用文件在线 URL 完成导入。

专业技能提升:学会 gRPC 接口调试

Apifox 将基于 .proto 文件内容生成对应的接口信息。示例接口中自带了一元调用、服务端流、客户端流和双向流四种调用方法。

专业技能提升:学会 gRPC 接口调试

发起一元调用

一元调用指的是在一个请求中发送一个消息,并接收一个消息作为响应。相较于 JSON ,gRPC 使用 Protocol Buffers(ProtoBuf)作为默认的序列化框架,可以更加紧凑地表述数据,提升传输速度。且 gRPC 使用 HTTP/2 作为底层传输协议,直接应用 HPACK 压缩算法对 Header 中的信息进行处理,在网络传输中减少了头部的大小,从而节省了带宽资源。这对于传输小型数据或需要实时响应的场景十分友好。
选择 SayHello 方法,在接口地址中填写 grpcb.in:9000。然后点击「自动生成」按钮生成请求体,轻点「调用」即可查看返回响应。

专业技能提升:学会 gRPC 接口调试

在 Apifox 中,你可以非常便捷地将接口地址提取至「环境」,以便团队内的其它成员或项目中的其它接口发起调用请求。

专业技能提升:学会 gRPC 接口调试

发起流式调用

服务端流、客户端流和双向流都被被称为流式调用。它允许客户端和服务器之间建立一个持久的双工流式连接,并通过流式传输来进行数据的读取和写入。流式调用的主要特点是可以在一个连接上发送和接收多个消息,支持持续交互和大规模数据传输,常用于交易所股票数据、视频语音通讯与在线游戏场景。

服务端流

正如同它在图标中所表示的意思一样,服务端流表示:一次发送,返回多个响应数据。例如订阅一分钟之内的所有股票的成交价格数据。

专业技能提升:学会 gRPC 接口调试

客户端流

在这种模式下,客户端可以连续地发送多个请求消息给服务器,而不需要等待服务器的立即响应。发起调用后,你可以持续在 Message 中持续填写请求信息,然后点击“发送”按钮。服务器在处理完所有请求后,发送一个单独的响应消息给客户端。

专业技能提升:学会 gRPC 接口调试

双向流

双向流允许客户端和服务器之间建立持久的双向通信,并可以同时传输多个消息。常见于在线游戏与实时视频通话软件,适用于实时通信和大规模数据传输场景。发起调用后客户端与服务端之间将持续保持会话,发送不同的请求内容后实时获得响应。

专业技能提升:学会 gRPC 接口调试

gRPC 接口协作

Apifox 能够基于 .proto 文件渲染出更适合人类阅读的 gRPC 接口文档,使得接口更容易在团队中进行协作。你可以点击接口右侧的菜单按钮获取协作链接,将它分享给其它团队成员对齐接口的调试方法。

专业技能提升:学会 gRPC 接口调试

Apifox 的 gRPC 接口调试功能正处于 Beta 公开测试阶段,目前的功能只是我们迈出的第一步,后续也会持续迭代更新。Apifox 作为 API 一体化协作平台,希望为不同的 API 技术提供同样优秀的体验。

点赞
收藏
评论区
推荐文章
liam liam
2年前
程序员的摸鱼加速器!
最近趁摸鱼时间体验了一款神器,堪称后端前端们的摸鱼加速器,测试们的寿命催化剂。那就是:Apifox。中国自主研发的集文档、接口调试、Mock、接口自动化测试一体的协作平台。一套系统、一份数据,可解决多个系统之间的数据同步问题。定义好接口文档,则接口调试、数据Mock、接口测试就可以直接使用,无需再次定义;接口文档和接口开发调试也可以同一个工具,接口调试完成后
liam liam
2年前
细数国产接口协作平台的六把武器!
1关于接口协作平台的畅想软件界发展至今,API(接口)的重要性日益凸显——不同的端,不同的模块都在通过API交互,不同角色的成员也都在围绕着接口展开工作。在这个前提下,一款集文档、接口调试、Mock、接口自动化测试一体的接口协作平台变得尤为必须。市面上优秀的接口调试工具如Postman、JMeter如雨后春笋般涌现,各大厂也在自研接口协作平台。那么问题来了
liam liam
1年前
Postman 调试微信支付接口教程,一看就会
前期准备在使用Postman调试微信支付接口之前,你需要做好以下准备:安装客户端应用,或使用网页版;成为;已申请。当你已经具备这三个条件,就可以进入微信支付接口调试之旅了脚本导入方式一:通过fork方式为了帮助商户开发者快速上手,微信官方将调试微信支付接口
Stella981 Stella981
3年前
Dubbo 接口转化为gRPC服务
公司是多语言研发环境,目前Java项目居多,使用Dubbo进行服务间调用。目前公司Nodejs项目、Golang已经很多,平常也用阿里开源的eggjs框架进行开发。经过技术选型,gRPC(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fgrpc.io)支持跨语言、高性能、HTTP/2,使用
Wesley13 Wesley13
3年前
QQ玩一玩最新调试方法
模拟器上测试时不能调试与手Q相关的接口,而非手Q相关的接口如果是使用CocosCreator开发可以直接使用浏览器调试。QQ玩一玩最新调试方法。之前的特殊版本手Q可以下岗了目前QQ玩一玩只支持Android机。为什么只支持Android机?(https://www.oschina.net/action/GoToLink?url
Easter79 Easter79
3年前
SpringCloud系列:利用SpringCloud Sleuth和Zipkin实现分布式服务调用链跟踪(一)
一、概述在单体应用时代,接口缓慢能够被迅速定位和发现,而随着分布式微服务的流行,服务之间的调用关系越来越复杂,错中复杂的调用关系使得我们想找到某一个接口的效率缓慢变得非常困难,而分布式服务调用跟踪组件就解决了这个问题。Sleuth是SprinCloud在分布式系统中提供追踪解决方案,zipkin是基于GoogleDapper的分布式链路调用监
liam liam
2年前
接口文档进化图鉴,有些古早接口文档工具,你可能都没用过
可能现在的小程序员听到以前还有人用过word来做接口文档,会惊讶得不行,但在前后端分离推行的早期,确实没有那么多趁手好用的接口文档工具。互联网发展到现在,接口文档也经历了从简单的word到markdown,到swagger,到Apifox等逐步进化的方式,变得越来越美观,越来越规范,也支持越来越多的功能辅助调试。接下来给大家盘点一下这些年接口文档的进化
liam liam
2年前
谁在从API经济里分得一杯羹!
从ApiHub说开去前阵子机缘巧合下载了个趁手的接口设计和调试管理工具——Apifox(),工具虽然小众,目前也才迭代了几个版本,但是产品里已经开辟了ApiHub模块来收集其他企业的开放Api。我看到快手开放API,企业微信,钉钉开放API等好几十个研发协同,效率管理和生活服务类的接口文档已经先行被收录进去了,目前提交的开放API项目数量还在缓慢增加。不得
API 小达人 API 小达人
1年前
「实用技巧」后端如何使用 Eolink Apikit 快速调试接口?
程序员最讨厌的两件事:1.写文档;别人不写文档。写文档、维护文档比较麻烦,而且费时,还会经常出现API更新了,但文档还是旧的,各种同步不一致的情况,从而耽搁彼此的时间,大多数开发人员不愿意写API文档。EolinkApikit为后端工程师提供API文档的创建与自动化生成、快速接口调试、以及API文档版本管理功能,协助后端工程师快速编写文档,调试接口,以及支持版本控制恢复历史记录。通过一套系统、一份数据,解决多个系统之间的数据同步问题。只要定义好接口文档,接口调试、数据Mock、接口测试就可以直接使用,无需再次定义。接口文档和接口开发调试使用同一个工具,接口调试完成后即可保证和接口文档定义完全一致。高效、及时、准确!
API 小达人 API 小达人
10个月前
Eolink Apikit「 零代码」快速发起 RPC 接口自动化测试
RPC(RemoteProcedureCall)远程过程调用,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC的核心思想是将远程服务抽象成一个接口,客户端通过调用这个接口,就可以实现对远程服务的访问。EolinkApikit支持多协议,RPC、DUBBO、HTTP、REST、Websocket、gRPC、TCP、UDP、SOAP、HSF等。零代码快速发起RPC接口自动化测试,可以根据RPC接口文档自动生成测试用例,开发者只需简单修改即可使用。