GraphQL是一种API查询语言和运行时环境,由Facebook于2015年开源。GraphQL可以使客户端能够准确地获取其需要的数据,而无需请求多次不必要的数据。Fastify是一个快速而低开销的web框架,它可以快速地为您的应用程序提供高效的服务。在本文中,我们将介绍如何在Fastify框架下实现GraphQL服务。
实现GraphQL服务的前提条件
在启动Fastify应用之前,您需要安装一些开发工具和Node.js的最新版本。然后,您需要在您的项目中安装以下依赖项:
npm install fastify fastify-gql graphql
其中,'fastify'是Fastify框架,'fastify-gql'是Fastify的GraphQL插件,'graphql'是一个GraphQL查询语言。
创建GraphQL服务
首先,我们需要将fastify-gql插件添加到我们的应用程序中。您可以通过以下方式实现:
const fastify = require('fastify')() fastify.register(require('fastify-gql'), { // 路径将用于下面的查询 path: '/graphql', // 提供schemas schema: myGraphQLSchema, })
核心代码是第二个参数,其中'schema'是GraphQL模式。 在这个参数中,我们将定义我们的GraphQL API。
组织GQL查询
在本例中,我们将定义一个简单的数据集合,这个数据集合将是我们的GraphQL API的一部分。假设我们有下面这个数据集:
-- -------------------- ---- ------- ----- ------ - - - --- ---- ----- ------ ------------ ----- -- ---- -- - --- ---- ----- ------ ------------ ----- -- ---- -- - --- ---- ----- ------ ------------ ----- -- ---- -- - --- ---- ----- ------ ------------ ----- -- ---- -- - --- ---- ----- ------- ------------ ----- -- ----- -- - --- ---- ----- -------- ------------ ----- -- ------ -- - --- ---- ----- ------ ------------ ----- -- ---- -- - --- ---- ----- -------- ------------ ----- -- ------ -- - --- ---- ----- -------- ------------ ----- -- ------ -- - --- ----- ----- --------- ----------- ------------ ----- -- -------- ---------- - -
对于这个数据集,我们可以创建下面这个GraphQL模式:
-- -------------------- ---- ------- ----- - -------- ----------- - - ------------------ ----- ------ - ------------- ---- ----- - ------------- ---- ---------- - ---- ---------- - --- --- ----- ------- ------------ ------ - -- ----- ---- - - ---------- -------- -- - -- ------------ - ------ ---- - ----- --------- - ------------- -- ---- --- ---------- -- ------------ - ------ ---- - ------ --------- - -
在这个示例中,我们定义了一个查询类型,getMyData,它接受一个ID参数并返回一个MyDataType对象。 MyDataType对象包含一个id,一个名字和一个简短的描述。我们还定义了MyDataType类型的数据格式,其中包含了id,name和description三个属性。
我们根据这个查询类型要让我们的GraphQL服务提供数据:
fastify.register(require('fastify-gql'), { // 路径将用于下面的查询 path: '/graphql', // 提供schemas schema: schema, // 提供API resolver: root })
在上面的代码中,'resolver'是一个函数,它接受一个查询参数,并返回一个响应。
测试GQL查询
现在,我们正在使用Fastify框架和GraphQL插件提供GraphQL服务。接下来,我们将测试我们的查询。可以使用GraphQL Playground作为客户端。你可以用以下方式运行:
npm install graphql-playground
安装完毕后,我们可以创建一个访问GraphQL服务的实例:
-- -------------------- ---- ------- ----- ------- - -------------------- ----- ---- - ---------------- -- ---- ----- - -------- ----------- - - ------------------ -- ---- ----- ------ - - - --- ---- ----- ------ ------------ ----- -- ---- -- - --- ---- ----- ------ ------------ ----- -- ---- -- - --- ---- ----- ------ ------------ ----- -- ---- -- - --- ---- ----- ------ ------------ ----- -- ---- -- - --- ---- ----- ------- ------------ ----- -- ----- -- - --- ---- ----- -------- ------------ ----- -- ------ -- - --- ---- ----- ------ ------------ ----- -- ---- -- - --- ---- ----- -------- ------------ ----- -- ------ -- - --- ---- ----- -------- ------------ ----- -- ------ -- - --- ----- ----- --------- ----------- ------------ ----- -- -------- ---------- - - -- -------- ----- ------ - ------------- ---- ----- - ------------- ---- ---------- - ---- ---------- - --- --- ----- ------- ------------ ------ - -- -- ----- ----- ---- - - ---------- -- -- -- -- - -- ----- - ------ ---- - ----- --------- - ------------- -- ---- --- --- -- ------------ - ------ ---- - ------ --------- - - -- --------- ---------------------------------------- - ----- ----------- ------- ------- --------- ---- --------------- ----- -------- -- - -- ----- ----- --- ------------------------ --------- -- ------------ --
打开GraphQL Playground,指向"http://localhost:{PORT}/graphql",进入查询模式,并在下方的编辑器中输入以下查询:
{ getMyData(id: "1"){ id name description } }
这将返回数据集的第一个项目。
结论
我们已经成功地在Fastify框架下实现了GraphQL服务,并成功进行了数据查询。GraphQL是一种功能强大而灵活的API查询语言,可以帮助我们构建强大、高效和灵活的API。通过使用Fastify框架,我们可以轻松地为我们的应用程序提供GraphQL服务。
通过掌握这些技术,我们可以更好地参与快速发展的Web技术,在构建更好的用户体验的过程中,更高效地完成我们需要解决的具体问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66eeae8c6fbf96019727646c