如何在 Node.js 中使用 GraphQL 编写 API

什么是 GraphQL

GraphQL 是一种新的 API 标准,由 Facebook 开发。相比于 RESTful API,GraphQL 具有更灵活、更可维护、更高效等优点。GraphQL 的主要特点如下:

  1. 强类型系统:GraphQL 使用自定义类型系统,相比 RESTful API,更加严谨,开发者能够更快速地确定 API 的输入和输出。

  2. 查询控制:GraphQL 允许客户端属性精准控制获取的数据。这样可以减少网络传输的数据量,提高数据传输效率。

  3. 面向数据:GraphQL 将服务端的数据作为一个大型的图形,客户端可以从中获取需要的数据。

  4. 可扩展性:GraphQL 可以轻松地扩展,不会影响到其他部分的功能和开发。

GraphQL 的优点

GraphQL 的优点有很多,如下:

  1. 数据请求更灵活:可以仅获取所需的数据,不需要返回整个资源的信息,提高数据传输的效率。

  2. 处理多个数据源:可以将数据从多个数据源进行查询,并返回一个集合。

  3. 更好的文献:由于GraphQL的数据结构更接近于你的UI ,所以你不用在前端重构API,提高了项目的开发效率。

  4. 更可扩展,更容易维护。因为 GraphQL 允许添加更多的字段,而不必更改现有代码,从而保持整个 API 的稳定性。

背景

在编写 Web 后端应用程序时,API 是一个必不可少的概念。但是,常规的 RESTful API 通常会呈现一些繁琐和难以维护的问题。由于 RESTful API 需要处理多个端点和请求,而且数据的形式也需要到处定义。这使得添加新功能或更改旧功能变得十分困难。

由于这些问题,GraphQL 逐渐成为了 Web 开发人员的关注点。GraphQL 是一种新的 API 标准,它的灵活性和可维护性使得它成为了许多 Web 应用程序的首选。

在本文中,我们将重点介绍如何使用 GraphQL 编写 Web 应用程序的 API。我们将使用 jQuery 和 Express.js 来展示 GraphQL 的优秀特性。

使用 Express.js 框架搭建 Apollo Server

首先,安装 express 和 graphql 模块:

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

然后,在 server.js 文件中配置如下:

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

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

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

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

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

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

上述代码中,我们创建了一个基本的 API 服务器,其中包括一个 /graphql 端点。

它由两组对象组成:

  1. 构建了一个 schema 对象,用于定义查询的字段和类型。

  2. 实例化一个 express 应用,并使用 /graphql 端点安装了 GraphQL 中间件。这个中间件将通过我们在 schema 和 rootValue 上定义的内容来处理 API 请求。在我们的示例中,代码会返回一条消息字符串。

可以使用 GraphQL 的可视化工具 GraphiQL 来验证我们的 API 是否有用:

在使用 GraphiQL 工具进行测试时,在左侧面板上,我们可以输入一个查询字符串。并且,这个面板会自动提示可用的查询字段:

-
  -------
-

作为响应,你将获得 "Welcome to Node.js" 消息的字符串。

构建 GraphQL 架构

在上一步中,我们只是很简单地返回了一条消息,但是 GraphQL 还有非常强大的查询能力。在这一步中,我们将使用这些能力构建我们的 GraphQL API。

我们将创建一个简单的 API,用于记录一些用户已完成的任务。

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

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

上述代码定义了一个简单的任务对象和一个根查询对象。我们定义了一个名为 task 的查询,它可以按照 ID 查找一项任务。我们还定义了一个名为 tasks 的查询,它将返回所有的任务列表。

将 GraphQL 集成到 Web 应用程序中

现在,我们将完整的 GraphQL 集成到 Express 应用程序中。

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

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

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

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

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

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

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

上述代码中,我们定义了一个名为 Task 的对象和一个名为 Query 的对象。Query 对象有两个查询字段,task 和 tasks。我们需要在实现的时候需要相应的修改 task 和 tasks 数组。

查询回调返回了一个任务对象或任务列表。在这里,我们使用了和之前一样的 GraphiQL 工具来验证我们做的修改是否有效。运行 GraphiQL 工具,然后输入如下代码:

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

接下来,你会发现在右侧的面板上,我们可以看到我们查询到的数据。

结论

现在你已经学习了如何在 Node.js 中使用 GraphQL 编写 API。使用 GraphQL API 很容易,而且易于扩展,具有更灵活、更可维护、更高效等优点。复杂的查询和控制数据的精细度是 GraphQL 最重要的特性之一。

在实际开发中,你可以使用这些示例代码和文档作为技术手册来引导你使用 GraphQL 编写 API,从而构建出更高效和更灵活的 Web 应用程序。

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