Fastify 是一个快速的 web 服务器框架,让构建高效的应用程序非常方便。GraphQL 是一种强大的查询语言,允许客户端指定需要获取的数据,而服务端只返回客户端请求的数据,减少了传输的数据量。本篇文章将介绍如何使用 Fastify 框架构建 GraphQL API。
安装依赖
首先,我们需要安装一些依赖项。
$ npm install fastify fastify-cors fastify-static fastify-compress $ npm install graphql fastify-gql
这些依赖包括:
- fastify:Fastify 框架
- fastify-cors:Fastify 插件,添加 CORS 头
- fastify-static:Fastify 插件,提供静态文件服务
- fastify-compress:Fastify 插件,压缩响应数据
- graphql:GraphQL 库
- fastify-gql:Fastify 插件,提供 GraphQL API
创建 Fastify 实例
接下来,我们需要创建一个 Fastify 实例。我们将按照如下的规范创建一个实例:
-- -------------------- ---- ------- ----- ------- - -------------------- ------- ---- -- ----------------------------------------- ------------------------------------------- - ----- -------------------- ---------- ------- ---------- -- --------------------------------------------- - ------- ----- --
在这里,我们向 Fastify 实例注册了三个插件:fastify-cors、fastify-static 和 fastify-compress。我们也使用了一个 logger,这将为我们提供一些运行时日志。 注意,我们为 fastify-static 定义了一个目录“public”,并将其公开为“/public”路由。
定义 GraphQL 服务
现在,我们可以添加我们的 GraphQL 服务。 首先,我们需要在应用程序中引入 GraphQL 库并定义一个简单的 Schema:
const { graphql, buildSchema } = require('graphql') const schema = buildSchema(` type Query { greeting: String } `)
这个简单的模式定义了一个名为“greeting”的字段,它返回一个字符串。
接下来,我们需要在 Fastify 中定义 GraphQL 路由:
fastify.register(require('fastify-gql'), { schema, graphiql: true, routes: true, prefix: '/graphql/' })
我们在这里向 Fastify 实例注册了 fastify-gql 插件,并将 GraphQL 模式传递给它。 我们通过设置 graphiql 参数来启用 GraphiQL 控制台,设置 prefix 参数为“/graphql/”以公开路由。
添加解析函数
现在,在 Schema 中我们已经定义了 greeting 字段,但我们还没有定义如何获取它。 我们需要为 greeting 字段定义一个解析函数:
const root = { greeting: () => { return 'Hello, World!' } }
在这里,我们定义了一个名为“greeting”的函数,它将返回字符串“Hello, World!”。
我们现在可以将这个解析函数添加到我们的 GraphQL 服务器中:
-- -------------------- ---- ------- ---------------------------------------- - ------- --------- ----- ------- ----- ------- ------------ --------------- ------ ------------ ------ --------- - --------- ----- ----- ------ -- - ----- -------- - ----- --------------- -- -------- --- ----- -------------------- - - --
在这里,我们为 GraphQL 服务提供了一个处理程序,并将其添加到 fastify-gql 插件中。 在 fastify-gql 插件的 handlers 中,我们为 greeting 字段定义了一个解析程序,该程序调用 graphql 函数并将请求发送到根对象。响应将用 reply.send() 发送回客户端。
完整的示例代码
现在,我们已经定义了一个简单的 GraphQL API,以便客户端可以获取 greeting 字段。以下是完整的示例代码:
-- -------------------- ---- ------- ----- ---- - --------------- ----- ------- - -------------------- ------- ---- -- ----- - -------- ----------- - - ------------------ -- ------ ------- ------ ----- ------ - ------------- ---- ----- - --------- ------ - -- -- ------ -------- -------- ----- ---- - - --------- -- -- - ------ ------- ------- - - -- --- ------- ------- -- ------- ---------------------------------------- - ------- --------- ----- ------- ----- ------- ----------- --------------- ------ ------------ ------ --------- - --------- ----- ----- ------ -- - ----- -------- - ----- --------------- -- -------- --- ----- -------------------- - - -- -- --- ------- -- ------- ----------------------------------------- ------------------------------------------- - ----- -------------------- ---------- ------- ---------- -- --------------------------------------------- - ------- ----- -- -- ----- --- ------ ----- ----- - ----- -- -- - --- - ----- -------------------- ------------------------ --------- -- ---------------------------------- - ----- ----- - ---------------------- --------------- - - -------
结论
Fastify 框架提供了一个简单而快速的方式来构建 GraphQL API,并且它使用了 GraphQL 库提供的批处理查询和有效内存使用等高级功能。 在创建 GraphQL API 时,请记住使用 Fastify,构建更快、更高效的应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6709cf39d91dce0dc87bf1f2