为什么说 GraphQL 是 RESTful 的更好替代方案?

前言

在 Web 开发中,我们经常需要从服务器获取数据。而 RESTful API 是目前最常用的 API 设计风格之一。但是,RESTful API 在某些情况下存在一些缺陷,例如过度获取数据、版本控制等问题。因此,GraphQL 作为一种新的 API 设计风格被提出,它可以更好地解决这些问题。

什么是 GraphQL?

GraphQL 是一种新的 API 设计风格,它是由 Facebook 开发的。与 RESTful API 不同,GraphQL 允许客户端明确地指定它所需要的数据,而不是像 RESTful API 那样返回整个资源。这使得客户端可以更好地控制数据的获取和处理。

GraphQL 的优点

更少的数据获取

RESTful API 中,客户端只能获取整个资源,而 GraphQL 允许客户端明确地指定它所需要的数据。这意味着客户端可以获取更少的数据,从而提高了性能。

例如,假设我们有一个 RESTful API,它返回一个用户的所有信息:

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

但是,客户端可能只需要获取用户的姓名和年龄。在 RESTful API 中,客户端只能获取整个用户信息。而在 GraphQL 中,客户端可以明确地指定需要获取的字段:

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

这将返回以下结果:

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

客户端只获取了需要的数据,而不是整个用户信息。

更好的版本控制

RESTful API 中,版本控制是一个很大的问题。每次更改 API,都需要创建一个新版本。这会导致代码的复杂性和维护成本的增加。

而在 GraphQL 中,版本控制更加容易。由于客户端可以明确地指定需要的数据,因此可以轻松地更改查询语句,而不需要创建新版本。

更好的类型检查

在 RESTful API 中,客户端只能依赖文档来了解 API 的返回值。这意味着客户端可能会使用错误的数据类型,从而导致错误。

而在 GraphQL 中,客户端可以使用 GraphQL 查询语言进行类型检查。这意味着客户端可以在编译时检查查询语句,从而避免在运行时出现错误。

GraphQL 的缺点

学习成本高

与 RESTful API 相比,GraphQL 学习成本更高。GraphQL 有自己的查询语言和架构,需要花费一定的时间来学习。

服务器端实现复杂

与 RESTful API 相比,GraphQL 服务器端实现更加复杂。由于客户端可以明确地指定需要的数据,因此服务器端需要更多的处理来满足客户端的需求。

如何使用 GraphQL?

安装

在使用 GraphQL 之前,需要安装相关的库和工具。可以使用以下命令来安装:

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

创建 GraphQL 服务器

在创建 GraphQL 服务器之前,需要定义 GraphQL 的架构。可以使用以下代码来定义一个简单的架构:

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

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

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

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

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

在上面的代码中,我们定义了一个 UserType 和一个 QueryTypeUserType 定义了用户的类型,包括用户的 ID、姓名、年龄、电子邮件和电话号码。QueryType 定义了查询类型,包括一个 user 查询,它接受一个 ID 参数并返回一个用户对象。

然后,我们可以使用以下代码来创建 GraphQL 服务器:

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

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

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

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

在上面的代码中,我们使用 Express 创建了一个服务器,然后将 GraphQL 中间件添加到服务器中。schema 参数是我们在上面定义的 GraphQL 架构。graphiql 参数启用了 GraphiQL 工具,它可以用于测试和调试 GraphQL 查询。

发送 GraphQL 查询

要发送 GraphQL 查询,可以使用以下代码:

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

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

在上面的代码中,我们使用 fetch 函数向 GraphQL 服务器发送查询。查询语句是一个 JSON 对象,包含一个 query 字段,它指定了要执行的查询。在这个例子中,我们查询了用户的姓名和年龄。

结论

GraphQL 是一种更好的 API 设计风格,它可以更好地解决 RESTful API 中存在的问题。GraphQL 允许客户端明确地指定它所需要的数据,从而提高了性能。此外,GraphQL 还具有更好的版本控制和类型检查功能。虽然 GraphQL 学习成本更高且服务器端实现更加复杂,但是它可以提供更好的开发体验和更好的性能。因此,我们应该考虑使用 GraphQL 来替代 RESTful API。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/673aa37039d6d08e88af17a8