在 Fastify 中使用 GraphQL 进行 API 设计
随着前后端分离架构的流行,API 也逐渐成为了 Web 应用程序中不可或缺的一部分。而为了更好地实现前后端分离,GraphQL 作为一种新的 API 设计方式,逐渐受到了越来越多人的关注。
Fastify 是一款快速、低开销、且易于扩展的 Node.js Web 框架。它能够以高效的方式处理大量请求,并可以与其他框架和库进行无缝集成。同时,Fastify 同样也支持使用 GraphQL 进行 API 设计。本文将介绍在 Fastify 中使用 GraphQL 进行 API 设计的基本流程,并给出相关示例代码。
- 安装 Fastify 和 GraphQL 依赖
在安装 Fastify 和 GraphQL 依赖之前,需要先安装 Node.js 运行环境。安装完 Node.js 后,在命令行中使用以下命令安装 Fastify 和 GraphQL 相关依赖:
npm install fastify fastify-gql graphql
- 创建 Fastify 应用程序
创建 Fastify 应用程序的代码如下所示:
const fastify = require('fastify')() fastify.listen(3000, (err, address) => { if (err) throw err console.log(`server listening on ${address}`) })
其中,我们使用 require
导入了 fastify 模块,并创建了 Fastify 服务器的实例。在 fastify.listen
函数中,我们监听了本地 3000 端口,并在控制台输出了提示信息。
- 创建 GraphQL Schema
在 Fastify 应用程序中,我们需要定义 GraphQL schema,这个 schema 决定了哪些数据可以查询和变异(即增删改查)。可以通过 graphql-tools
包中的 makeExecutableSchema
函数来创建自定义的 GraphQL schema。示例代码如下所示:
-- -------------------- ---- ------- ----- - -------------------- - - ------------------------ ----- -------- - - ---- ----- - ------ ------ - - ----- --------- - - ------ - ------ -- -- ------ ------- - - ----- ------ - ---------------------- --------- --------- --展开代码
在上面的示例代码中,我们定义了一个简单的查询操作,即查询一个字符串 "Hello World!"。其中,typeDefs
定义了 GraphQL schema 中的类型,resolvers
定义了类型查询/变异操作的实现,而 makeExecutableSchema
函数将 typeDefs
和 resolvers
参数组合起来生成了一个完整的 GraphQL schema。
- 将 GraphQL 添加到 Fastify 应用程序中
创建 GraphQL schema 后,我们需要将其添加到 Fastify 应用程序中。可以使用 fastify-gql
包来实现 GraphQL 和 Fastify 的集成。示例代码如下所示:
-- -------------------- ---- ------- ----- ------- - -------------------- ----- - -------------- - - ---------------------- ----- - -------------------- - - ------------------------ ----- -------- - - ---- ----- - ------ ------ - - ----- --------- - - ------ - ------ -- -- ------ ------- - - ----- ------ - ---------------------- --------- --------- -- -------------------------------- - ------- --------- ---- -- -------------------- ----- -------- -- - -- ----- ----- --- ------------------- --------- -- ------------ --展开代码
在上面的示例代码中,我们导入了 graphqlFastify
函数,并使用 fastify.register
函数将 GraphQL schema 添加到 Fastify 应用程序中。其中,graphiql: true
表示启用 GraphiQL 用户界面,方便在浏览器中直接交互式查询测试。最后使用 fastify.listen
函数开启 Fastify 服务器。
- 编写 GraphQL 查询/变异操作
在了解了如何将 GraphQL 添加到 Fastify 应用程序后,我们需要定义自己的查询和变异操作。下面是一个简单的 GraphQL 查询操作的示例代码:
-- -------------------- ---- ------- ----- -------- - - ---- ----- - ------- ---------- ---------- ----- ------ - ---- ------ - --- --- ----- ------- ---- ---- - - ----- ------ - - - --- ---- ----- ------- ---- -- -- - --- ---- ----- ------- ---- -- -- - --- ---- ----- ------ ---- -- - - ----- --------- - - ------ - ------- -- -- ------- ------- --- - -- -- -- ------------------ -- --------- --- ---- - - ----- ------ - ---------------------- --------- --------- --展开代码
在上面的示例代码中,我们定义了一个查询操作 people
,它从 people
数组中返回了 Person 类型的数组。我们还定义了一个 person
查询操作,它接收一个 id
参数并使用 find
方法来查询指定的 person。
- 使用 GraphQL variables 来传递参数
如果想在 GraphQL 操作中使用变量作为参数,可以使用 GraphQL variables 来传递参数。具体实现可以采用以下方式:
-- -------------------- ---- ------- ----- -------- - - ---- ----- - ------- ---------- ---------- ----- ------ - ---- ------ - --- --- ----- ------- ---- ---- - - ----- ------ - - - --- ---- ----- ------- ---- -- -- - --- ---- ----- ------- ---- -- -- - --- ---- ----- ------ ---- -- - - ----- --------- - - ------ - ------- -- -- ------- ------- --- - -- -- -- ------------------ -- --------- --- ---- - - ----- ------ - ---------------------- --------- --------- -- ----- ----- - - ----- ----------- ---- - ---------- ---------- - -- ---- --- - - - ---------------- ------- ------- ---- ---- -------- - ------ ---------- - --------- --- - - -------------- -- - ------------------------ -- --- - ----- - ------- - --- ---- ----- ------- ---- -- - - - --展开代码
在上面的示例代码中,我们定义了一个查询操作,并使用 variables
参数传递了 personId
变量。最终输出结果与我们预期一致。
同时,Fastify 还支持使用 fastify-gql-upload
包来支持文件上传操作。具体实现可以参考该包的文档。
通过本文的介绍,我们了解了如何在 Fastify 中使用 GraphQL 进行 API 设计,并编写了相关的示例代码。希望这篇文章可以帮助读者更好地理解 GraphQL 和 Fastify 的使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67920032504e4ea9bd5d3b19