GraphQL 是一种用于 API 的查询语言,它使得客户端能够精确地请求所需数据,从而避免了过度获取数据和不必要的网络请求。Fastify 是一个快速、低开销的 Web 框架,它可以轻松地处理 GraphQL API。在本文中,我们将介绍如何使用 Fastify 处理 GraphQL API。
安装 Fastify 和相关插件
在开始使用 Fastify 处理 GraphQL API 之前,我们需要安装 Fastify 和相关插件。可以使用 npm 在命令行中安装它们:
npm install fastify fastify-cors fastify-gql graphql
fastify
是 Fastify 的核心库。fastify-cors
是 Fastify 的跨域插件。fastify-gql
是 Fastify 的 GraphQL 插件。graphql
是 GraphQL 的 JavaScript 实现。
创建 Fastify 应用程序
在安装了 Fastify 和相关插件之后,我们可以开始创建 Fastify 应用程序。在创建 Fastify 应用程序之前,我们需要导入必要的模块和插件:
const fastify = require('fastify')({ logger: true }) const cors = require('fastify-cors') const gql = require('fastify-gql') const schema = require('./schema')
logger
是 Fastify 的日志记录器。schema
是 GraphQL 的模式定义。
然后,我们需要将插件添加到 Fastify 应用程序中:
fastify.register(cors) fastify.register(gql, { schema, graphiql: true })
cors
插件用于处理跨域请求。gql
插件用于处理 GraphQL API。schema
是 GraphQL 的模式定义。graphiql: true
启用了 GraphQL 的 Web UI。
创建 GraphQL 模式定义
在 Fastify 应用程序中使用 GraphQL 之前,我们需要创建 GraphQL 的模式定义。可以使用 graphql-tools
模块来创建模式定义:
-- -------------------- ---- ------- ----- - -------------------- - - ------------------------ ----- -------- - - ---- ----- - ------ ------ - - ----- --------- - - ------ - ------ -- -- ------ ------- - - ----- ------ - ---------------------- --------- --------- -- -------------- - ------
这个模式定义包含一个 Query
类型,其中包含一个 hello
字段,它返回一个字符串。我们还需要一个 resolvers
对象,它包含一个 Query
对象,它具有一个 hello
函数,它返回一个字符串。最后,我们使用 makeExecutableSchema
函数创建一个可执行的模式定义,并将其导出。
启动 Fastify 应用程序
在创建 Fastify 应用程序并创建 GraphQL 模式定义之后,我们可以启动 Fastify 应用程序并访问 GraphQL API。可以使用 listen
方法启动 Fastify 应用程序:
fastify.listen(3000, (err, address) => { if (err) { fastify.log.error(err) process.exit(1) } fastify.log.info(`server listening on ${address}`) })
这个例子将 Fastify 应用程序监听在本地的 3000 端口上。如果启动成功,我们可以在浏览器中访问 http://localhost:3000/graphql
,并使用 GraphQL 的 Web UI 来测试 API。
结论
在本文中,我们介绍了如何使用 Fastify 处理 GraphQL API。我们首先安装了 Fastify 和相关插件,然后创建了 Fastify 应用程序和 GraphQL 模式定义。最后,我们启动了 Fastify 应用程序,并访问了 GraphQL API。Fastify 提供了一种快速、低开销的方式来处理 GraphQL API,它可以帮助我们轻松地构建和测试 API。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6763df7f856ee0c1d423d4cd