如何使用 GraphQL 构建灵活和可扩展的 API

GraphQL 是一种新兴的 API 技术,它提供了一种灵活和可扩展的方式来构建 API。相比传统的 RESTful API,GraphQL 具有更好的数据获取和管理功能,可以大大提高前端开发效率和用户体验。本文将介绍如何使用 GraphQL 构建灵活和可扩展的 API,并提供相关的示例代码。

什么是 GraphQL?

GraphQL 是一种数据查询和操作语言,由 Facebook 在 2012 年开发。它允许客户端指定要获取的数据的结构和格式,而不是由 API 决定。它的核心优势是提供了一种统一的、可组合的、强类型的查询语法,使得客户端可以快速查询到所需的精确数据。

GraphQL 的特点

以下是 GraphQL 的主要特点:

  • 统一的查询语法:GraphQL 定义了一种统一的、可组合的查询语法,使得客户端可以以一种非常直观的方式获取所需的数据。

  • 强类型:GraphQL 中的数据类型是显式的、静态的,并由架构定义。这减少了出错的可能性,增强了应用的健壮性和可维护性。

  • 灵活的数据获取:GraphQL 允许客户端取回所需的精确数据,而不是整个文档,从而减少了不必要的带宽和延迟。客户端可以根据需要获取多个资源,或者在一个请求中获取所有资源。

  • 可扩展:GraphQL 通过允许开发人员自定义复杂类型来提供强大的扩展性。因此,如果您需要添加新的字段或属性,只需向架构中添加它即可。

  • 适应性:GraphQL 已经支持了几乎所有的后端语言和框架,包括但不限于 Node.js、Java、Ruby、Python 和 .NET,可以融合到各种不同的开发堆栈中。

如何构建 GraphQL API?

要构建 GraphQL API,首先需要定义一种呈现 API 响应的类型和结构的 Schema,然后使用该 Schema 来处理和响应客户端请求。

Schema 定义了可以查询的类型以及每个类型可以访问的所有字段。这些类型是架构中的核心概念。接下来,需要在架构中定义每个字段的解析器。字段解析器是一个函数,它从数据库、缓存、REST 服务等任何数据源中获取数据,并将其作为响应的一部分返回给客户端。

下面是一个简单的例子,展示了如何使用 GraphQL 和 Node.js 来构建一个 API:

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

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

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

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

在这个例子中,我们首先定义了一个 Schema,它有一个 Query 类型和一个 hello 字段。然后,我们使用一个根解析器对象指定该字段的处理程序。最后,我们使用 Express 库来创建一个新的应用程序,将 GraphQL 中间件添加到中间件栈中,并用端口 4000 启动。

当客户端发送一个 GraphQL 请求时,GraphQL HTTP 将其解析,并调用相应的字段解析器来获取所需的数据。在这个例子中,我们的解析器简单地返回字符串“Hello World!”。

如何查询 GraphQL API?

一次 GraphQL 查询由从 API 容器中请求的一组字段和关联的参数组成。客户端在一个 GraphQL 请求中指定需要查询的字段,以及它们的变量、类型和关系。然后,API 服务器返回精确的查询结果。

GraphQL 请求的语法类似于 JSON 对象,如下所示:

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

每个请求中的字段由字段名称和可能的属性列表组成。如果一个属性返回一个函数或对象,则该属性变为子字段,该对象可能具有子字段等。

关于参数的处理与 REST API 类似,因此您可以将参数作为字段的值进行传递。在 GraphQL 中,可以接受具有可选默认值的参数,并将它们传递给您的解析器函数。

要发送 GraphQL 请求,可以使用像 fetch() 这样的网络请求库,或者使用各种不同的 GraphQL 客户端库,如 Apollo 或 Relay。

如何测试 GraphQL API?

为了测试 GraphQL API,您可以使用各种不同的工具,如 GraphQL Playground、GraphiQL 或者使用测试库和断言。GraphiQL 是一种内建的 GraphQL 开发工具,让您查看和测试架构的可视化。GraphQL Playground 是另一种交互式 GraphQL IDE,类似于 GraphiQL,但拥有更多的功能和可配置性。

以下是使用 Apollo Client 和 Jest 进行测试的示例代码:

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

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

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

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

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

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

在这个示例中,我们创建一个 ApolloServer,发送一个简单的查询,并断言它的响应是否与预期相同。

结论

本文介绍了如何使用 GraphQL 构建灵活和可扩展的 API。通过明确定义 Schema 和字段解析器,GraphQL 允许前端开发人员快速构建出精确的 API,与此同时还具有更好的性能和可维护性。我们还提供了示例代码来说明如何实现和测试 GraphQL API。希望这篇文章能够帮助您深入了解 GraphQL,并开始构建灵活和可扩展的 API。

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