GraphQL 是一种用于 API 的查询语言和运行时环境,它使得客户端能够精确地获得所需的数据而无需提出多个请求。Fastify 是一个快速和低开销的 Web 框架,它具有与 Express 相似的 API,但比 Express 更快。在本文中,我们将探讨如何在 Fastify 中集成 GraphQL,以便使用 GraphQL 进行查询和数据处理。
安装 Fastify 和 GraphQL
在开始之前,我们需要安装 Fastify 和 GraphQL。可以使用 npm 来安装它们:
npm install fastify npm install fastify-gql npm install graphql
创建 Fastify 应用程序
接下来,我们将使用以下代码创建一个 Fastify 应用程序:
-- -------------------- ---- ------- ----- ------- - -------------------- ---------------- ----- --------- ------ -- - ------ - ------ ------- - -- -------------------- ----- -------- -- - -- ----- ----- --- ------------------- --------- -- ------------ --
这个应用程序只有一个路由,它将返回一个简单的 JSON 对象。
集成 GraphQL
要在 Fastify 中集成 GraphQL,我们需要使用 fastify-gql 插件。我们可以在应用程序中注册插件,如下所示:
-- -------------------- ---- ------- ----- ------- - -------------------- ----- --- - ---------------------- ----- ------ - - ---- ----- - ------ ------ - - ----- --------- - - ------ - ------ -- -- ------- - - --------------------- - ------- --------- -- -------------------- ----- -------- -- - -- ----- ----- --- ------------------- --------- -- ------------ --
在上面的代码中,我们定义了一个简单的 GraphQL schema 和相应的解析器。然后我们使用 fastify-gql 插件将 schema 和解析器注册到 Fastify 应用程序中。
现在,我们可以使用 GraphiQL 工具来测试 GraphQL API。在浏览器中打开 http://localhost:3000/graphql
,您将看到一个交互式的 GraphiQL 界面。在左侧的编辑器中输入以下查询:
{ hello }
然后按下运行按钮,您将在右侧的结果窗口中看到以下输出:
{ "data": { "hello": "world" } }
处理复杂查询
GraphQL 允许客户端查询多个字段,这使得查询变得更加复杂。为了处理复杂的查询,我们可以使用 GraphQL 的特性来定义更复杂的 schema 和解析器。例如,以下 schema 定义了一个名为 Book
的对象类型和一个名为 Query
的根查询类型:
-- -------------------- ---- ------- ----- ------ - - ---- ---- - ------ ------ ------- ------ - ---- ----- - ------ ------ - -
然后,我们可以定义相应的解析器来处理查询。以下解析器将返回一个包含两本书的数组:
const resolvers = { Query: { books: () => [ { title: 'The Great Gatsby', author: 'F. Scott Fitzgerald' }, { title: 'To Kill a Mockingbird', author: 'Harper Lee' } ] } }
现在,我们可以在 GraphiQL 中测试这个查询。在左侧的编辑器中输入以下查询:
{ books { title author } }
然后按下运行按钮,您将在右侧的结果窗口中看到以下输出:
-- -------------------- ---- ------- - ------- - -------- - - -------- ---- ----- -------- --------- --- ----- ----------- -- - -------- --- ---- - ------------- --------- ------- ---- - - - -
处理变异
除了查询之外,GraphQL 还支持变异。变异用于修改数据,例如添加、更新或删除数据。我们可以使用 GraphQL 的特性来定义变异 schema 和相应的解析器。例如,以下 schema 定义了一个名为 Mutation
的根变异类型:
-- -------------------- ---- ------- ----- ------ - - ---- ---- - ------ ------ ------- ------ - ---- ----- - ------ ------ - ---- -------- - -------------- ------- ------- -------- ---- - -
然后,我们可以定义相应的解析器来处理变异。以下解析器将在 books
数组中添加新的书籍:
-- -------------------- ---- ------- ----- ----- - - - ------ ---- ----- -------- ------- --- ----- ----------- -- - ------ --- ---- - ------------- ------- ------- ---- - - ----- --------- - - ------ - ------ -- -- ----- -- --------- - -------- --- - ------ ------ -- -- - ----- ------- - - ------ ------ - ------------------- ------ ------- - - -
现在,我们可以在 GraphiQL 中测试这个变异。在左侧的编辑器中输入以下变异:
mutation { addBook(title: "1984", author: "George Orwell") { title author } }
然后按下运行按钮,您将在右侧的结果窗口中看到以下输出:
{ "data": { "addBook": { "title": "1984", "author": "George Orwell" } } }
现在,如果我们再次查询 books
,我们将看到新添加的书籍:
{ books { title author } }
-- -------------------- ---- ------- - ------- - -------- - - -------- ---- ----- -------- --------- --- ----- ----------- -- - -------- --- ---- - ------------- --------- ------- ---- -- - -------- ------- --------- ------- ------- - - - -
结论
在本文中,我们学习了如何在 Fastify 中集成 GraphQL,并使用 GraphQL 进行查询和数据处理。我们还探讨了如何处理复杂的查询和变异。GraphQL 是一个非常强大的 API 查询语言,它可以帮助我们更有效地处理数据。Fastify 是一个快速和低开销的 Web 框架,它与 GraphQL 集成非常容易。我希望本文能够帮助您开始使用 Fastify 和 GraphQL 来构建更好的 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6764ca45856ee0c1d42e4a43