Fastify 进阶:实现 GraphQL 服务

Fastify 是一个高效、低开销并且可扩展的 Node.js web 框架。它专注于提供快速的回应,并通过严格的插件体系结构来保持代码的高可维护性。在实际应用中,可以用 Fastify 来构建高性能的 web 服务器,同时也很容易与其他工具和框架集成。

GraphQL 则是一种现代的 API 架构模式。它是一个开放规范,旨在简化 API 设计,并提供一个强大、灵活和可伸缩的数据查询语言。GraphQL 实际上并不是一个具体的实现,而是一种 API 呈现方式。

在本文中,我们将介绍如何利用 Fastify 框架来实现 GraphQL 服务。

安装 Fastify

首先,需要安装 Node.js 和 Fastify。你可以通过 npm 包管理工具执行以下命令安装 Fastify:

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

创建 Fastify 应用程序

在开始编写 GraphQL 服务之前,我们需要创建一个 Fastify 应用程序。以下是一个简单的 Fastify 应用程序示例:

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

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

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

该代码创建了一个 Fastify 应用程序,将其绑定到 3000 端口,并设置了一个 / 路径的路由,它返回一个 hello: world 的 JSON 假数据。

安装和配置 Graphql

接下来,我们将安装和配置 fastify-gql 插件,它是 Fastify 的 GraphQL 插件。你可以通过以下命令进行安装:

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

然后,我们需要将其添加到 Fastify 应用程序中。以下是 Fastify 应用程序示例的修改版本:

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

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

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

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

该代码创建了一个 GraphQL schema,其中定义了一个 Query 类型,在这个 Query 类型中,我们定义了一个 hello 字段,它返回 world。启用 graphiql 后,你可以在 http://localhost:3000/graphql 中打开 GraphQL 浏览器并开始查询。

扩展 Resolvers

在上一个示例中,我们只定义了一个非常基本的 hello 解析器。但 GraphQL 更有趣的地方是,你可以扩展它的各种不同类型。例如,你可以添加一个 user 类型以获取用户列表,这是一个更丰富的接口。

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

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

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

在上面的代码中,我们添加了一个 users 字段来返回用户数组,每个用户对象包含 idname 字段。现在你可以使用以下查询从 GraphQL 浏览器返回用户列表:

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

扩展 GraphQL schema

除了添加解析器外,你还可以添加新的类型、字段等等。以下代码示例展示如何为用户添加 posts 字段:

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

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

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

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

在上面的代码中,我们添加了一个 Post 类型和 User.posts 字段。现在你可以使用以下查询从 GraphQL 浏览器返回用户的帖子列表:

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

结论

通过 Fastify 和 GraphQL,我们可以很容易地构建一个可伸缩、扩展的 GraphQL 服务。Fastify 和 GraphQL 都是开源的,所以你可以自由地将它们用于商业或个人项目。

在本文中,我们已经介绍了如何在 Fastify 中设置 GraphQL 服务,并展示了如何添加解析器和扩展 schema。它希望对那些想要进一步学习如何在 Fastify 应用程序中使用 GraphQL 的人们有所帮助。

完整代码请参见 GitHub 仓库

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