REST vs GraphQL vs gRPC三者API技术比较


3种最流行的API开发技术深度比较
REST、GraphQL 和 gRPC 是现代 Web 应用程序中最流行的 3 种 API 开发技术。然而,选择一个并不容易,因为它们都有独特的功能。
在本文中,我将比较和对比 REST、GraphQL 和 gRPC 的特性和用法,以帮助您确定最适合您项目的一种。

REST——最流行的技术
Representational State Transfer (REST) 是现代 Web 开发中最流行的 API 开发技术。它为数据传输提供了无状态架构。客户端请求包含完成请求所需的所有详细信息,并且服务器不会保留客户端的状态。

REST API 支持本机 HTTP 缓存标头并使用 HTTP 方法(POST、GET、PUT、PATCH 和 DELETE)来操作数据。任何人都可以轻松开始使用 REST,因为它简单且学习曲线浅。

此外,REST 易于扩展且可靠。因此,开发人员可以毫无疑问地为他们的应用程序选择它。甚至 Twitter、Paypal 和 Google 等公司也在其产品中使用 REST API。

REST 的好处

  • 您可以放心地使用标准 HTTP 方法实现 CRUD 操作。
  • REST 已经存在了很长时间,几乎每个开发人员都知道如何使用它。
  • 它支持缓存。
  • 它是可扩展的,并提供客户端和服务器之间的分离。
  • 您可以轻松地将其集成到多个应用程序中。

REST 的缺点
  • 它存在过度获取和获取不足的问题。
  • 它不能维持状态。
  • 它有很大的有效载荷大小。
  • 随着应用程序的扩展,端点的数量急剧增加。
  • 更新数据库模式或数据结构并不容易。

何时选择 REST
如果您没有任何特定要求,REST 是最佳选择。例如,如果您是开发新手,那么使用 REST 是完美的选择,因为它的学习曲线很浅。此外,它拥有庞大的生态系统,您可以轻松找到解决您面临的任何问题的方法。

此外,在处理大量请求和有限带宽时,您最好使用 REST。在这种情况下,您可以使用它的缓存支持来提高性能。
总的来说,我们不能将 REST 的使用限制在某些类型的应用程序中。例如,如果您的应用程序明确需要 GraphQL 或 gRPC,您可以使用 REST。

GraphQL - 客户端驱动的标准
GraphQL 是 2015 年推出的一种数据查询语言。它允许开发人员查明并获取他们需要的确切数据。与 REST 相比,GraphQL 是一种客户端驱动的方法,客户端可以决定需要哪些数据、如何获取数据和格式。它还解决了过度获取和获取不足的问题,因为客户端可以查明所需的数据。

GraphQL 使用查询、更改和订阅来操作数据。

  • 查询— 从服务器请求数据。
  • 突变更改——修改服务器端数据。
  • 订阅- 在数据更新时获取实时更新。

GitHub 是使用 GraphQL 的最大公司之一。它在 2016 年从 REST 切换到 GraphQL,它极大地帮助了 GitHub 的快速增长。
GraphQL 的好处
  • 它非常灵活,可以准确地满足客户的需求。
  • 它没有过度获取和获取不足。
  • 它受到著名语言的支持,包括 JavaScript、Java、Python、Ruby 和 PHP。
  • 它允许自定义数据的结构。
  • 单个查询可以包含来自多个资源的字段。

GraphQL 的缺点
  • 查询可能很复杂。
  • 它缺乏内置的缓存支持。
  • 与 REST 相比,学习 GraphQL 可能具有挑战性。
  • 默认不支持文件上传。

何时选择 GraphQL
GraphQL 是查询具有许多记录的数据库的绝佳选择。您可以使用 GraphQL 消除过度获取,只检索特定格式的必要数据以提高应用程序性能。此外,GraphQL 非常适合需要聚合来自多个资源的数据的情况。

当您不完全了解客户端如何使用 API 时,您也可以使用 GraphQL。使用 GraphQL,您无需预先定义严格的合约。相反,您可以根据客户反馈逐步构建 API。

gRPC — 一种面向性能的技术
gRPC 是谷歌在 2016 年推出的远程过程调用的演进版本。它是一种轻量级的解决方案,使用最少的资源提供最高的性能。

gRPC 遵循基于合约的通信方法。它要求客户端和服务器在开始通信之前都有合同。gRPC 使用 Protobuf(一种声明性语言)来创建合约,并使用选定的语言为客户端和服务器生成兼容的代码。

gRPC 支持的通信方式有 4 种:

  • 一元- 首先,客户端向服务器发出单个请求。然后,服务器发送一个响应。
  • Client-Streaming — 首先,客户端将一系列请求流式传输到服务器,然后是一条消息,通知流已结束。最后,服务器发送一个回复。
  • 服务器流式传输——首先,客户端向服务器发出单个请求。然后,服务器向客户端发送消息流。
  • 双向流——客户端和服务器都可以在建立初始连接后随时发送消息。

gRPC 的好处
  • 它是开源的。因此开发人员可以根据需要对其进行修改。
  • 它支持多种语言,包括 JavaScript、Java、C、C++、C#、Kotlin、Python、Go 和 PHP。
  • 它能够进行负载平衡。
  • 与 REST API 相比,它默认使用 HTTP2 来减少延迟。
  • 它以二进制格式序列化数据。
  • 它支持全双工流。

gRPC 的缺点
  • 默认情况下,它不附带浏览器支持。
  • 与 REST 和 GraphQL 相比,它没有坚定的社区支持。

何时选择 gRPC
gRPC 是资源较少的设备之间通信的绝佳选择。例如,物联网设备、智能设备和相机可以从使用 gRPC 中受益,因为它使用最少的资源优化了性能。

除此之外,gRPC 可以在微服务架构中用于处理服务之间的通信,因为它可以与用不同语言编写的服务进行通信。

结论
我在本文中讨论了 3 种最流行的 API 开发技术,它们的优点、缺点以及我们应该何时选择它们。我希望您现在对 REST、GraphQL 和 gRPC 有了更好的理解,可以为您的应用程序选择最好的一种。
但是,重要的是要注意,我们不能将一个放在另一个之上,然后说这比另一个优越。每个都有独特的功能,您应该根据您的项目要求选择一个。