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

创建 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 接口调试工具

知识扩展: