对比 REST 和 GraphQL:谁更适合你的应用?

阅读时长 5 分钟读完

Web 应用程序通过 HTTP 通信,以非常规的方式提供数据,并提供用于访问该数据的资源端点。REST 和 GraphQL 是两种常见的架构设计选择,每种架构都有其自己的优缺点。本文将深入比较 REST 和 GraphQL,并讨论哪种适合您的应用程序。

REST

REST(Representational State Transfer)是一个基于 HTTP 协议的网络应用程序架构风格,使用 RESTful API 作为访问 web 资源的方式。它的核心思想是,将客户端发送的请求通过 HTTP 协议映射到一组服务器资源,并使用 HTTP 方法(如 GET、POST、PUT、DELETE)定义对它们的操作。

REST 优点

  • 使用标准 HTTP 协议,没有需求限制,即允许使用各种编程语言和数据格式。
  • 可缓存的资源,可以由客户端和服务器之间缓存,提高性能。
  • 支持多种动作(GET、POST、PUT、DELETE),允许访问和操作任意 web 资源。
  • 无状态的服务,允许水平扩展,并允许多个监听器接收请求。
  • REST API 模式直接映射到 HTTP 方法,构建简单。

REST 缺点

  • REST 风格 API 中的批量操作需要使用多个请求。
  • 由于服务端 API 可能包含大量的嵌套结构,所以客户端可能收到过多的数据。
  • 当请求正确时,服务器可能发送大量的数据,使性能瓶颈。

GraphQL

GraphQL 是 Facebook 在 2012 年开发出来的一种用于 web API 的查询语言。与 REST 不同,GraphQL 将请求作为查询字符串发送到服务器。当接收到请求时,GraphQL 解释查询,并返回所请求的数据。为了允许嵌套和不同级别的查询,GraphQL 使用了 Typescript。

GraphQL 优点

  • GraphQL 可以精确获取客户端请求的数据,避免在 RESTful API 中出现的“随意数据提取”状况。
  • GraphQL 的视图在客户端定义,而不是服务端,在这种情况下客户端可以很容易自定义数据存储结构,而不受服务端阻碍。
  • 客户端决定数据需要哪些字段,服务端不必发送每个相关对象的所有字段,因此减少了不必要的网络流量。

GraphQL 缺点

  • 由于 GraphQL 需要定义类型和字段名称,因此它可能很复杂。
  • 如果替代了传统的 RESTful API,您需要更多的服务端代码。
  • 如果不同字段需要支持状态和责任,那么这些需求将如何满足呢?
  • 由于 GraphQL 仍在发展和变化中,因此可能需要更新和迁移升级。

REST 和 GraphQL 比较

比较简单度

在简单度方面,REST 接口仍然是最简单的,仅需要遵守 HTTP 协议呈现 API 服务就已经足够了。GraphQL 的查询语言,类型定义以及操作必须明确指出,使得其比 REST 复杂得多。

开发效率

在开发效率方面,GraphQL 比 REST 更适合给前端工程师使用。需要注意的是,它涉及到更多的服务端代码的实现和复杂性。

数据依赖性

REST 和 GraphQL 之间的不同一个显著差异是数据依赖性。GraphQL 允许客户端指定它需要的资源,缩短了与服务器通信的距离,并减少了网络开销。这使得 GraphQL 能够成为更高效的选择。

缓存机制

在缓存机制方面,REST 相对于 GraphQL 更有利。这是一种根据操作(PUT、DELETE、POST、GET)- 资源的理念,允许使用模式与 HTTP 缓存相容性。另一方面,GraphQL 更新语句很难进行缓存。

性能

GraphQL 可以提高性能,如果请求过程中有多个资源,则可以很容易地取回它们。尽管 REST 也可以从本地缓存中响应请求,但是当请求复杂的时候,API 可能会返回大量数据,与暴露 API 或 GraphQL 相比,REST 接口的通信量会相应增加。

示例代码

RESTful API

-- -------------------- ---- -------
-- --- --------
---------------
  --------- -- -----------
  ---------- -- -------------------
  
-- ------ -- ------ --------
--------------- -
  ------- -------
  -------- -
    --------------- ------------------
  --
  ----- ---------------- ----- ----- ---- --
--
  --------- -- -----------
  ---------- -- -------------------

-- ------ --------
------------------- -
  ------- --------
---

GraphQL API

-- -------------------- ---- -------
-- --- --------
----- -
  -------- ---- -
    --
    ----
  -
-

-- ------ -- ------ --------
-------- -
  ------------- ----- ----- -
    --
    ----
  -
-

-- ------ --------
-------- -
  -------------- ---- -
    --
    ----
  -
-

总结

REST 和 GraphQL 是互联网开发中的两种广泛使用的 API 架构风格。REST 是经典风格,基于 HTTP 协议,使用简单且允许参与者选用最适合自身环境的所有语言。GraphQL 是近年来出现的一种高大上的 API 风格,使用更复杂的查询语言,并需要更多的服务端代码支持。

当您考虑 REST 或 GraphQL 时,请考虑您的应用程序的功能性需求以及您是否愿意投入更多的时间和资源进行更奇特的技术实践。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64eed58af6b2d6eab38c7955

纠错
反馈