如何使用 Node.js 与 GraphQL 构建完善的 API 接口系统

阅读时长 10 分钟读完

GraphQL 是现代 Web 应用程序所使用的新一代 API 查询语言。它允许你以一种灵活的方式描述你的数据要求,并从服务器获取精确的响应。与传统 REST API 相比,GraphQL 有很多优点,如无需创建多个端点来调用不同的资源,更好的错误处理,以及更少的数据传输。本文将探讨如何使用 Node.js 和 GraphQL 来构建完善的 API 接口系统。

为什么选择 Node.js 和 GraphQL

Node.js 是一种可扩展的服务器端的 JavaScript 运行环境,它的主要优点是其高效的异步 I/O 操作,以及大量的第三方模块,这样可以更快速地实现项目。GraphQL 则提供了更加灵活和高效的查询方式,并且具有诸多优点,与传统的 REST API 非常不同。

安装 Node.js 和 GraphQL

如果你使用的是 Linux 或 Mac 系统,你可以使用 Homebrew 安装 Node.js。在终端中输入以下命令:

安装 GraphQL 的最佳方式是使用 npm(Node.js 的包管理器)。在终端中,输入以下命令来安装 GraphQL 依赖项:

设计图形模式

GraphQL 是一种 API 查询语言,它允许客户端指定需要返回的数据。为了实现一个 GraphQL API,首先需要设计一个数据模型。这个模型提供了查询的入口点以及与数据的交互。对于一个基于 Node.js 的 GraphQL API,通常使用 MongooseSequelize 来连接数据库。

比如我们要创建一个简单的书籍管理系统,定义一个 Book 数据类型,包括书名、作者、出版日期等属性以及增删查改的 Mutation,可以这样定义该模型:

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

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

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

创建服务器程序

使用 Express 可以轻松地创建一个用于 Web 应用的服务器。我们可以通过这个服务器将 GraphQL 添加到应用程序中,并将数据模型绑定到 GraphQL 客户端。

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

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

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

在上面的代码中,我们定义了一个 root 对象,该对象提供了查询和修改数据的方法。我们还使用 graphqlHTTP 函数为服务器配置了一个路径,允许我们将 GraphQL 请求发送到服务器。

数据库连接

使用 Mongoose 实现连接 mongodb 数据库,这里提供一个完整的例子片段:

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

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

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

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

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

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

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

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

查询数据

接下来,我们可以使用 GraphQL 来查询数据。

这个查询将获取所有书籍的 ID、书名和出版日期,你可以根据自己的需要定制返回的属性。还可以通过添加参数来过滤结果。

这个查询将返回 ID 为 5c1a42b16fce339995e2b1ff 的书籍的详细信息。如果没有找到书籍,则返回 null。

修改数据

在 GraphQL 中,修改数据使用的是 Mutation。你可以使用 Mutation 类型来定义修改数据的函数,然后通过在请求体中添加 args 参数来调用它们。

这个 Mutation 将创建新书并返回书籍的详细信息。

同样,对于更新和删除数据也可以使用 mutation,这里不再赘述。

总结

本文介绍了如何使用 Node.js 和 GraphQL 来构建完善的 API 接口系统。我们学习了如何设计数据模型、使用 Express 创建服务器程序、连接数据库、查询数据和修改数据。使用 GraphQL 来构建 API 接口系统提供了更灵活、更高效的方式,具有更好的可靠性和易用性。

你可以在 GitHub 上找到这个例子的完整实现代码。

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

纠错
反馈