GraphQL 与传统 RESTful API 的比较分析

阅读时长 6 分钟读完

在前端开发中,API 是不可或缺的一部分。RESTful API 是目前最流行的 API 架构之一,但近年来出现了一种新的 API 架构:GraphQL。在本文中,我们将比较分析 GraphQL 与传统 RESTful API 的优缺点,并探讨如何在实际开发中选择合适的API 架构。

RESTful API 的优缺点

RESTful API 是一种基于 HTTP 协议,使用 REST 架构风格的 Web API。它具有以下优点:

优点

  1. 简单易学:RESTful API 的设计理念简单明了,易于理解。开发者可以快速上手,快速开发。

  2. 良好的分层性:RESTful API 的设计理念使得它易于分层设计。每个层次之间的接口清晰明了,容易维护。

  3. 跨平台:RESTful API 是基于 HTTP 协议的,因此可以被任何支持 HTTP 协议的语言和平台调用。使用 RESTful API 设计 Web 应用程序,可以让不同的终端设备都可以方便地访问。

缺点

  1. 过度传输数据:RESTful API 传输的数据是固定的 JSON 或 XML 类型。但这种数据格式不利于移动端的开发,因为它需要传输大量的数据。

  2. 版本控制问题:由于 RESTful API 对每个资源只有一个 URL,因此 API 的发展很难实现版本控制。

GraphQL 的优缺点

GraphQL 是一种由 Facebook 开发的新 API 架构。它可以更好地满足客户端请求的需求,只返回所需的数据。

优点

  1. 灵活性:GraphQL 具有可扩展性和灵活性。开发人员可以轻松创建和管理数据模型,适应各种环境的需求。

  2. 冗余数据量更少:GraphQL 可以在查询过程中只返回客户端需要的数据。这意味着不再有请求传输不必要的数据从而减少了客户端与服务器之间的通信流量。

  3. 版本控制容易:GraphQL 可以帮助解决版本问题。每个 GraphQL 查询都带有一个版本号,从而能够更轻松地维护和更新 API。

缺点

  1. 复杂性:GraphQL 相对于 RESTful API 更加复杂。需要学习新的查询语言和 API 设计模式。

  2. 缓存问题:GraphQL 查询由客户端控制,它无法利用浏览器缓存。这可能会导致一些更大的性能问题。

GraphQL 与 RESTful API 比较分析

延迟加载

GraphQL具有延迟加载的特性。只有在客户端端请求时,GraphQL 才会从服务器获取数据。这是它相对于 RESTful API 卓越的一个方面。

RESTful API 由于无法像 GraphQL 一样精确地请求数据,因此资源和链接必须在返回的每个请求中都包含。这意味着,获取一个资源时,你可能必须得到很多你并不需要的资源。

数据规范化

GraphQL 的一个重要特性是支持数据规范化。这是在前端应用程序中共享任意数据的一种方法。这种模式可使查询的返回值更好地呈现在用户界面上。

而 RESTful API 很难做到这点。因为 RESTful API 无法向 GraphQL 一样准确地请求特定数据。这个数据还有可能再每个 API 响应中返回多次,从而加重了响应时间。

缓存

在缓存方面,RESTful API 具有优势。WebSocket 连接基于拉技术,不能被缓存,因为它只是连接。RESTful API 可以使用 HTTP,HTTP 支持 HTTP 缓存,通常可以减少网络请求和提高网页性能。

请求查询

GraphQL 查询语言中拥有范围和字段选取,意味着在客户端上只返回所需的数据。而 RESTful API 无法做到这点,它需要在响应中包含大量不必要的数据,这会导致网络带宽浪费。

GraphQL 使用指南

对于新项目或具有可预见性的简单项目,GraphQL 是一个不错的选择。GraphQL 适合处理大量查询而不需要像 RESTful API 那样重复获取相同数据。如果你正在开发一个带分页站点,那么 GraphQL 不推荐使用。

如果你是新手,请从熟悉语言和 API 设计模式开始学习,再进行 GraphQL 开发。一般情况下,学习 GraphQL 需要 2-3 个星期,才能开始下一步的考虑。此外,还需要亲自进行反复实践,并不断地尝试。

GraphQL 查询语言与 GraphQL 的 HTTP 协议的交互和 RESTful API 的 HTTP 请求的交互极其相似。如果你熟悉 RESTful API 设计,那么学习 GraphQL 会变得更加容易。

示例代码

GraphQL 示例

GraphQL.js 是一个 GraphQL 库文件,它用来创建 GraphQL 应用程序。

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

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

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

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

RESTful API 示例

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

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

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

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

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

结论

GraphQL 和 RESTful API 都有各自的优劣点。GraphQL 的最大优势是减少了传输的冗余数据,并且能够精确地请求所需的数据。然而 RESTful API 的固有优势是在分页站点和 API 版本控制方面的。因此,在实际开发中,根据具体需求来选择合适的 API 架构是非常重要的。

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

纠错
反馈