使用 Nexus 构建类型安全的 GraphQL API

阅读时长 9 分钟读完

使用 Nexus 构建类型安全的 GraphQL API

GraphQL 是一种强类型的查询语言,迅速成为前端开发的重要技术之一。随着 GraphQL 的流行,越来越多的开发者开始关注 GraphQL API 中的类型安全问题。在开发 GraphQL API 时,使用 Nexus 可以帮助我们构建类型安全的 API,确保我们的 API 遵循约定,减少开发中出现的类型错误。

本文将介绍如何使用 Nexus 框架在 GraphQL API 中实现类型安全,并提供详细的代码示例和指导意义。

  1. 什么是 Nexus?

Nexus 是一个使用类型安全方式来构建 GraphQL API 的框架。使用 Nexus,我们可以将 GraphQL 中的类型定义转化为 TypeScript 中的类型定义,保证我们的 API 的类型安全性。

Nexus 完全基于 GraphQL Schema Definition Language (SDL) 进行操作,因此对于熟悉 GraphQL 的开发者来说,非常易于上手。

  1. 基本使用

在使用 Nexus 之前,我们需要先安装相关依赖项。

通过以下命令安装 nexus 和依赖库:

接下来,我们可以创建一个新的 nexus 应用。在这个应用中,我们可以创建一个名为 "schema" 的文件夹,并在其中创建以下文件:

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

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

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

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

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

这里我们定义了两个类型,一个 User 类型和一个 Post 类型。在 User 类型中,我们定义了一个名为 "posts" 的字段,它返回一个 Post 列表。在 Post 类型中,我们定义了一个名为 "author" 的字段,它返回一个 User 实例。

在 Query 类型中,我们定义了两个查询方法,一个是 "users" 方法,用于返回 User 列表,另一个是 "user" 方法,用于返回特定用户。

接下来,我们可以在应用的根目录下创建一个名为 "index.ts" 的文件,并在其中创建以下代码:

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

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

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

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

在这个文件中,我们使用 makeSchema 函数将 Query、User 和 Post 三个类型组合成一个完整的 schema。同时,我们也定义了两个输出路径,用于输出生成的 schema 和 TypeScript 类型定义文件。

  1. 运行应用

现在我们已经完成了代码的基本编写,接下来我们可以使用如下命令来运行我们的应用:

运行后,我们可以在浏览器中访问 http://localhost:4000 来查看 GraphQL Playground,这里就可以输入 graphql 语句查询数据库啦。

至此,我们已经成功地使用 Nexus 构建了一个类型安全的 GraphQL API,并且能够通过 Playground 进行测试和调试。下面我们来看一些更深层次的细节。

  1. Nexus 的进阶使用

除了基本用法外,Nexus 还提供了一些更深层次的用法,它们包括:

  • 钩子函数:在类型定义之前/之后添加代码,例如,在添加字段之前验证其有效性。
  • 调试:在运行时调试 Nexus 应用,以便更好地理解和跟踪问题。
  • 插件:使用 Nexus 提供的插件来增强应用的功能,如缓存、错误处理、性能等。

在接下来的展示中,我们将实现一个基本的插件,它允许通过 GraphQL 操作来创建新用户。

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

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

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

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

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

这是一个带有核心业务逻辑的插件,它允许通过 Graphql Mutation 操作来创建新用户。要使用这个插件,我们需要在根目录下添加一个名为 "nexus.ts" 的文件,用于托管所有 nexus 相关的配置和模块。

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

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

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

在这里我们使用 Nexus 的 addPlugin 方法将我们的 CreateUser 插件添加到 schema 中。现在我们已经完成了插件的编写和使用,接下来,我们可以尝试使用该插件在 GraphQL Playground 中创建新用户:

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

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

上述操作会在数据库中创建一个名为 "test" 的新用户,并将 "test@gmail.com" 设置为用户的电子邮件地址。

  1. 总结

在本文中,我们介绍了如何使用 Nexus 框架构建类型安全的 GraphQL API。我们先是对 Nexus 基本使用进行了介绍,随后深入研究了 Nexus 的高级用法以及如何编写和使用插件,最后提供了一些示例代码和使用建议。

在实际开发过程中,通过使用 Nexus 构建 GraphQL API,我们可以大大提高应用的类型安全性和开发效率,为团队合作和代码维护带来极大的便利。除了本文介绍的用法外,我们还可以使用 Nexus 来管理应用程序中的完整数据模型、使用 Hooks 自动验证输入,以及使用@next将应用程序迁移到 GraphQL v15 等等。我们鼓励前端工程师们探索更多 Nexus 的用法,以更快速、高效、安全地构建 GraphQL 应用程序。

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

纠错
反馈