gRPC 与 REST:哪个更适合你的 API?

在本文中,我们比较了 gRPC 和 REST API 协议,强调了它们的差异、优点和缺点。帮助你根据你的 API 需求做出明智的选择

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

gRPC 与 REST:哪个更适合你的 API?

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

首先我们来讲讲什么是 REST 吧~

REST(REpresentational State Transfer 的缩写)是一种架构风格,旨在帮助创建和组织分布式系统。这一切都始于 2000 年的 Fielding,他致力于开发一种独特的客户端-服务器通信标准化方法。

REST 使用 HTTP 协议进行通信,它被广泛用于 Web 应用程序中。REST 只是为高层架构实现提供了关于后端数据如何通过 JSON/XML 消息格式提供给客户端的指南。

API 使用 REST 指南来提供可供使用的 Web 服务。REST API 在所谓的资源中提供这些 Web 服务。资源代表服务器中的单个状态,可以通过通用接口访问,然后可以通过 HTTP 动词获取或操作:GET、POST、DELETE 和 PUT。

那讲完 REST,咱们再来讲讲 RESTful

RESTful

RESTful 是一种接口的风格,什么风格呢?顾名思义,REST 风格

一个接口需要符合要求才能称之为 RESTful 接口

  • 客户端与服务端独立运行
  • 接口无国籍区分
  • 接口数据可缓存
  • 约束请求方法以及请求路径

比如我给大家展示一下一些 RESTful 的接口的方法以及路径

方法

  • GET 以只读模式访问资源
  • POST 创建一个新资源
  • PUT 更新给定的资源
  • DELETE 移除或删除资源

路径

  • /products GET:获取所有产品
  • /products/:id GET:获取由 id 指定的给定产品
  • /products:id DELETE:删除给定的产品
  • /products:id PUT:编辑给定的产品
  • /products POST:创建一个新产品

gRPC 是啥

gRPC 是一个基于 RPC 的框架,且是面向 HTTP2 进行设计的

所以 gRPC 的优点自然也包含了 HTTP2 的优点:

  • 数据传输二进制分帧
  • 多路复用
  • 服务端推送
  • 头部压缩

gRPC 与 REST

其实 gRPC 应该跟 HTTP + RESTful 进行比较,因为 gRPC 既包含了传输协议又包含了传输规范

但是其实也可以比较一下

Protobuf 与 JSON

gRPC 和 REST 接收响应的格式不同。

REST 使用 JSON 格式接收消息。虽然我们可以接收 XML、原始二进制格式等格式的消息,但最佳实践和教程使 JSON 成为规范,而且由于 JSON 灵活、高效、平台中立且与语言无关。

gRPC 使用 Protobuf 消息格式以消息二进制格式发送请求和接收响应。

JSON 和 Protobuf 都与平台无关,这意味着它们可以被开发和使用,而与所使用的平台无关。

JSON 在系统之间传输时速度较慢。Protobuf 消息传递速度更快,因为消息包在通过网络发送之前被编组。编组是将参数和远程函数打包成消息二进制包的过程。

HTTP/1.1 与 HTTP/2

REST 在通信以及发送请求和接收响应中使用 HTTP/1.1。gRPC 使用 HTTP/2,这对于进程间通信来说甚至更快。

HTTP/1.1 比 HTTP/2 慢。HTTP/2 旨在改进 HTTP/1.1 的局限性。这使得 gRPC 在请求-响应方面比 REST 更快。

REST 在多路复用方面缺乏更多。REST 一个接一个地加载资源,一个资源必须等到前一个资源加载完成。gRPC 使用 HTTP/2,它使用 TCP 连接发送多个数据流,这些数据被拆分为二进制代码消息并为消息编号,以便客户端知道每个二进制消息属于哪个流,从而确保没有资源被阻塞.

所以我们看到,HTTP/1.1 对于多个请求是低效的。

通过服务器推送和标头压缩,gRPC 的 HTTP/2 仍然比 REST 的 HTTP/1.1 提高了性能排名。服务器推送允许 HTTP/2 在请求之前将内容从服务器推送到客户端,而 HTTP/1.1 无法做到这一点,服务器仅在请求时提供内容。Header 压缩要求 HTTP/2 能够使用 HPACK 压缩方法从 Header 中删除不必要的消息。

流媒体与请求/响应

在 REST 中,我们只能执行请求并获得响应之类的东西。这是由于它用于通信的 HTTP/1.1 协议在事物的各个方面都非常有限。

另一方面,正如我们所知,gRPC 使用 HTTP/2 进行通信。使用 TCP 连接,HTTP/2 支持来自服务器的多个数据流以及传统的请求-响应。

使用 gRPC,我们可以执行:

  • 客户端流:这涉及客户端向服务器发送数据流。服务器注册以接收来自客户端的数据流,然后发送一条消息作为响应。
  • 服务器流:客户端向服务器发送一个单曲,服务器将打开一个流连接,并随着时间的推移向客户端发送数据流。当流到达时,客户端将注册一个要注意的事件。
  • 双向流:这是双向的。服务器和客户端可以相互发送和接收数据流。

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

知识扩展: