GraphQL + MySQL:构建高效查询服务

阅读时长 7 分钟读完

GraphQL 是一种由 Facebook 开发的数据查询语言,其主要特点是能够在客户端自定义请求数据,避免了传统 RESTful API 中出现的“过度获取”或“过度请求”的问题。而 MySQL 是一种流行的关系型数据库,其稳定性和可扩展性得到了广泛认可。本文将介绍如何将 GraphQL 和 MySQL 结合起来,构建高效的查询服务。

环境配置

首先,需要安装 MySQL 数据库,并创建一个名为 graphql 的数据库。接着,需要在该数据库中创建一个名为 users 的表,其中包含以下字段:

  • id:整数类型,主键
  • name:字符串类型,用户姓名
  • age:整数类型,用户年龄
  • email:字符串类型,用户邮箱
  • createdAt:日期类型,用户创建时间

接下来,需要安装 Node.js 和 npm,然后使用 npm 安装以下依赖项:

  • express:用于创建 HTTP 服务器
  • express-graphql:用于创建 GraphQL 服务器
  • graphql:GraphQL 的 JavaScript 实现
  • mysql2:MySQL 的 Node.js 驱动程序

编写 GraphQL Schema

在创建 GraphQL 服务器之前,需要编写 GraphQL Schema,它定义了可用的查询和数据类型。在本例中,我们将定义一个名为 User 的数据类型,它包含了 idnameageemailcreatedAt 字段。我们还将定义一个名为 Query 的根查询类型,它包含了一个 users 查询,用于检索所有用户。

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

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

编写 GraphQL Resolver

接下来,需要编写 GraphQL Resolver,它负责处理查询请求并返回相应的数据。在本例中,我们将使用 MySQL 查询数据库,并将查询结果转换为 GraphQL 数据类型。以下是 users 查询的 Resolver 示例:

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

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

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

在上面的代码中,我们使用 mysql2 创建了一个 MySQL 连接,并在 users 查询中执行了一个简单的 SELECT 语句。我们还将查询结果中的 createdAt 字段转换为 ISO 字符串格式,以便 GraphQL 可以正确解析它。

创建 GraphQL 服务器

最后,我们需要使用 express-graphql 创建一个 GraphQL 服务器,并将前面定义的 Schema 和 Resolver 传递给它。以下是完整的代码示例:

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

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

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

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

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

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

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

在上面的代码中,我们首先创建了一个 MySQL 连接,并使用 buildSchema 构建了 GraphQL Schema。接着,我们编写了 Resolver,并将 Schema 和 Resolver 传递给 graphqlHTTP 函数,创建了一个 GraphQL 服务器。最后,我们使用 express 创建了一个 HTTP 服务器,并将 GraphQL 服务器挂载到其上。

使用 GraphQL 查询数据

现在,我们可以使用 GraphQL 查询语言查询数据了。打开浏览器,访问 http://localhost:3000/graphql,可以看到 GraphQL Playground。在左侧的查询编辑器中输入以下查询语句:

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

点击运行按钮,就可以看到查询结果了。以下是示例查询结果:

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

总结

本文介绍了如何将 GraphQL 和 MySQL 结合起来,构建高效的查询服务。通过编写 Schema 和 Resolver,创建 GraphQL 服务器,并使用 GraphQL 查询语言查询数据,我们可以轻松地实现客户端自定义请求数据的功能,避免了传统 RESTful API 中出现的“过度获取”或“过度请求”的问题。如果您对 GraphQL 和 MySQL 感兴趣,可以继续深入了解它们的更多特性和用法。

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

纠错
反馈