使用 Nexus 构建类型安全的 GraphQL API
GraphQL 是一种强类型的查询语言,迅速成为前端开发的重要技术之一。随着 GraphQL 的流行,越来越多的开发者开始关注 GraphQL API 中的类型安全问题。在开发 GraphQL API 时,使用 Nexus 可以帮助我们构建类型安全的 API,确保我们的 API 遵循约定,减少开发中出现的类型错误。
本文将介绍如何使用 Nexus 框架在 GraphQL API 中实现类型安全,并提供详细的代码示例和指导意义。
- 什么是 Nexus?
Nexus 是一个使用类型安全方式来构建 GraphQL API 的框架。使用 Nexus,我们可以将 GraphQL 中的类型定义转化为 TypeScript 中的类型定义,保证我们的 API 的类型安全性。
Nexus 完全基于 GraphQL Schema Definition Language (SDL) 进行操作,因此对于熟悉 GraphQL 的开发者来说,非常易于上手。
- 基本使用
在使用 Nexus 之前,我们需要先安装相关依赖项。
通过以下命令安装 nexus 和依赖库:
yarn add nexus graphql graphql-binding
接下来,我们可以创建一个新的 nexus 应用。在这个应用中,我们可以创建一个名为 "schema" 的文件夹,并在其中创建以下文件:
-- -------------------- ---- ------- -- --------------- ------ - ----------- ---------- - ---- -------- -- -- ---- -- ------ ----- ---- - ------------ ----- ------- ------------- - ------------ ----------------- ------------------ --------------------- - ----- ------- ----- --------------- ----- - ------ -- - ------ ----------- ---------- ------ - --- ----------------- - -- --------- -- --- -- --- -- -- ---- -- ------ ----- ---- - ------------ ----- ------- ------------- - ------------ ------------------ -------------------- ----------------- - ----- ------- ----- --------------- ----- - ------ -- - ------ ----------- ---------- ------ - --- ----------------- - -- ---------- -- --- -- --- -- -- ----- -- ------ ----- ----- - ------------ ----- -------- ------------- - --------------------- - ----- ------- ----- --------------- ----- - ------ -- - ------ ----------------------- -- --- --------------- - ----- ------- ----- - --- ------ -- ----- --------------- - -- -- - ------ -- - ------ --------------------- ------ - --- ---------- - --- -- --- -- ---
这里我们定义了两个类型,一个 User 类型和一个 Post 类型。在 User 类型中,我们定义了一个名为 "posts" 的字段,它返回一个 Post 列表。在 Post 类型中,我们定义了一个名为 "author" 的字段,它返回一个 User 实例。
在 Query 类型中,我们定义了两个查询方法,一个是 "users" 方法,用于返回 User 列表,另一个是 "user" 方法,用于返回特定用户。
接下来,我们可以在应用的根目录下创建一个名为 "index.ts" 的文件,并在其中创建以下代码:
-- -------------------- ---- ------- -- -------- ------ - ---------- - ---- -------- ------ ---- ---- ------- ------ - ------ ----- ---- - ---- ----------------- ----- ------ - ------------ ------ ------- ----- ------ -------- - ------- -------------------- --------------------- -------- -------------------- ------------------------ -- --- ------ - ------ --
在这个文件中,我们使用 makeSchema 函数将 Query、User 和 Post 三个类型组合成一个完整的 schema。同时,我们也定义了两个输出路径,用于输出生成的 schema 和 TypeScript 类型定义文件。
- 运行应用
现在我们已经完成了代码的基本编写,接下来我们可以使用如下命令来运行我们的应用:
yarn dev
运行后,我们可以在浏览器中访问 http://localhost:4000 来查看 GraphQL Playground,这里就可以输入 graphql 语句查询数据库啦。
至此,我们已经成功地使用 Nexus 构建了一个类型安全的 GraphQL API,并且能够通过 Playground 进行测试和调试。下面我们来看一些更深层次的细节。
- Nexus 的进阶使用
除了基本用法外,Nexus 还提供了一些更深层次的用法,它们包括:
- 钩子函数:在类型定义之前/之后添加代码,例如,在添加字段之前验证其有效性。
- 调试:在运行时调试 Nexus 应用,以便更好地理解和跟踪问题。
- 插件:使用 Nexus 提供的插件来增强应用的功能,如缓存、错误处理、性能等。
在接下来的展示中,我们将实现一个基本的插件,它允许通过 GraphQL 操作来创建新用户。
-- -------------------- ---- ------- -- ------------------------- ------ - ------ - ---- -------- ------ - ---- ------------- - ---- -------- ----- ----------- ------ - --------- -- - -------------------- --------------------------- - ----- ------- ----- - ----- ----- ----- -------- --- ------ ----- ----- -------- --- -- ---------- - ----- ----- -- ---- - ----- -- - ------------------------ ----- - ----- ------ -- --- ------ - --- ----- ------ -- -- -- -- -- ------ ------- -----------
这是一个带有核心业务逻辑的插件,它允许通过 Graphql Mutation 操作来创建新用户。要使用这个插件,我们需要在根目录下添加一个名为 "nexus.ts" 的文件,用于托管所有 nexus 相关的配置和模块。
-- -------------------- ---- ------- -- ------------ ------ - ---------- - ---- -------- ------ ---- ---- ------- ------ - ------ ----- ---- - ---- ----------------- ------ ---------- ---- ----------------------- ------ ----- ------ - ------------ ------ ------- ----- ------ -------- ------------- -------- - ------- -------------------- --------------------- -------- -------------------- -------------------- -- ---
在这里我们使用 Nexus 的 addPlugin 方法将我们的 CreateUser 插件添加到 schema 中。现在我们已经完成了插件的编写和使用,接下来,我们可以尝试使用该插件在 GraphQL Playground 中创建新用户:
-- -------------------- ---- ------- -------- ---------- - ----------- ----- ------ ------ ---------------- - - -- ---- ----- - -
上述操作会在数据库中创建一个名为 "test" 的新用户,并将 "test@gmail.com" 设置为用户的电子邮件地址。
- 总结
在本文中,我们介绍了如何使用 Nexus 框架构建类型安全的 GraphQL API。我们先是对 Nexus 基本使用进行了介绍,随后深入研究了 Nexus 的高级用法以及如何编写和使用插件,最后提供了一些示例代码和使用建议。
在实际开发过程中,通过使用 Nexus 构建 GraphQL API,我们可以大大提高应用的类型安全性和开发效率,为团队合作和代码维护带来极大的便利。除了本文介绍的用法外,我们还可以使用 Nexus 来管理应用程序中的完整数据模型、使用 Hooks 自动验证输入,以及使用@next将应用程序迁移到 GraphQL v15 等等。我们鼓励前端工程师们探索更多 Nexus 的用法,以更快速、高效、安全地构建 GraphQL 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6474d6e2968c7c53b021601d