gRPC API详解:从实现原理到使用实例

本文将深入剖析 gRPC API 的实现原理,详细讲解 gRPC API 是如何工作的,并提供使用实例。

用 Apifox,节省研发团队的每一分钟

gRPC API详解:从实现原理到使用实例

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

现阶段 API 设计的问题

在开发过程中,有一些很困扰前、后端团队交互的问题:

  • 谁来设计 API?
  • 提供什么形式的 API?
  • 什么时候可以提供 API?

通常都是以下模式:

  • 前端等着后端设计 API。或者通过独立的 API 管理工具来设计接口,然后后端再参照实现
  • 前端根据 API 管理工具/或后端生成的 Swagger/Apifox 文档手工编写交互 model 和 service,或者通过自动化 codegen 工具从 Swagger/Apifox 自动生成
  • 如果有变更,继续重复上述两个步骤。

理想的 API 设计

从上面可以看出,无论是等后端设计还是通过 API 管理工具来设计都会有某一方或两方都需要参照 API 文档来手工实现代码逻辑的问题,都会存在 API 与代码实现脱节的问题。理想情况下,我们希望 API 设计/生成方式具备如下特性:

  • 利于前/后端协作,API 定义文件既是 活文档;
  • API 设计独立于代码实现,可以通过设计好的 API 文档自动生成前/后端代码;
  • API 设计好了,前/后端即可分别开发,不需要等着某一方提供后才能着手开发;
  • API 有修改时,前/后端都可以自动化的响应变更,而不需要通过手动编码的方式去查找哪些字段、哪些接口有变化;
  • 通过 API 文档生成的接口代码应该是易用的、性能优化的;
  • API 应该具备一定的向后兼容性;
  • Mock

基于以上几点,笔者觉得 gRPC 是现阶段比较合适的 API 设计规则。

gRPC

gRPC 是 Google 推出的一款 RPC 工具,本文不会对 RPC 原理做过多介绍,也不会详细的讲解 gRPC 本身,将专注于介绍用 gRPC 来设计 API 的好处上。对于 RPC 以及 gRPC 本身,后续文章再对其作进一步介绍。

gRPC 是通过 .proto 文件来设计的,也就是说它可以独立于前/后端设计、管理。这样,在开发早期,前/后端人员都可以对其进行设计,而且因为 .proto 文件只是纯文本文件,可以使用源代码管理工具(如:Git、SVN等)对其进行管理。这从 API 版本的管理上比使用类似 yapi 这样独立的 API 管理工具来说更好,也不需要为此单独部署一套软件。这就解决了在 API 设计/管理层面上前/后端协作的问题。

gRPC 的设计是独立于代码实现的,它有一套自己的语法规则(非常简单,很快就能上手),而且官方和社区提供了大部分编程语言/框架的代码生成。这就解决了代码实现与 API 文档不一致的问题,一但 API 有调整,通过工具即可自动生成最新的代码,后端服务及数据模型,前端访问接口服务及数据模型。

gRPC 是通过二进制数据传输的,而且提供了数据压缩等特性,相比传统的 JSON 格式,它有着更快的 CPU (序列化/反序列化)性能以及更小的网络数据传输流量(二进制、数据压缩)。

gRPC 的向后兼容性通过 Protobuf 体现,Protobuf Message 有两个特点:默认值和字段序号,可以较好地解决兼容性问题。这体现在:

默认值:从设计层面还在纠结字段 null 的情况,所有字段若不设置都会有默认值(除了 String 的默认值为空字符串外和集合类型的默认值为不可变空集合外,其它对像类型字段的默认值均为 null);

字段序号:字段名字的改变,只要保证对应的序号不变或不起冲突,那接口就是兼容的,不需要前/后端的 .proto Message 设计完全一致。

Apifox 支持调试 gRPC

Apifox 支持基于 .proto 文件的 gRPC 调试,包括一元调用和流式调用。在创建项目时「选择 gRPC 项目」-->「导入 .proto 文件」,无需写代码即可直接调用 gRPC 接口。

使用 Apifox 调试 gRPC 接口

在调试 gRPC 接口之前,也需要先导入作为 API 定义的 .proto 文件。如果一个 .proto 文件依赖于其他 .proto 文件,那么需要手动添加依赖关系目录。

导入作为 API 定义的 .proto 文件

一元调用

只需要在地址栏填写 URL 后点击「调用」按钮,即可发起一元调用。

发起一元调用

流式调用

流式调用包含服务端流、客户端流、双向流

在发起调用之后,你可以在 Message 标签下撰写消息并发送。Apifox 提供了一个时间线视图,按照时间顺序集中展示调用状态、发送的消息、收到的消息。点击消息之后,可以非常方便地查看消息的详情。

流式调用包含服务端流、客户端流、双向流

关于 Apifox

Apifox 是一体化 API 协作平台,可以实现 API 文档、API 调试、API Mock、 API 自动化测试,是更先进的 API 设计/开发/测试工具。Apifox 提供了一种全面的 API 管理解决方案。使用 Apifox ,你可以在统一的平台上设计、调试、测试以及协作你的 API,消除了在不同工具之间切换和数据不一致的问题。 简化了你的 API 工作流,并确保了前端、后端和测试人员之间的高效协作。

比 Postman 更好用的 API 工具 —— Apifox

知识扩展: