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 接口。

创建 gRPC

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

添加 .proto

一元调用

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

一元调用

流式调用

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

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

流式调用

关于 Apifox

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

Apifox
Apifox 接口调试工具

知识扩展: