GraphQL 是一种由 Facebook 开发的 API 查询语言和运行时环境。GraphQL 在前后端分离架构中发挥了重要作用,并且对前端开发有很大的指导意义。在 Node.js 开发中,我们通常会使用 graphql-yoga 包来实现 GraphQL 服务。graphql-yoga 是一个基于 Express 平台的 GraphQL 服务器,它封装了 GraphQL 的一些常见问题,使我们可以快速构建和开发 GraphQL 服务。
在本文中,我们将介绍如何使用 npm 包 @marcusstenbeck/graphql-yoga 来创建一个 GraphQL 服务。
第一步:安装 npm 包 @marcusstenbeck/graphql-yoga
如果我们使用 npm 包管理器,则在项目根目录下打开终端并输入以下命令:
npm install @marcusstenbeck/graphql-yoga
如果我们使用 yarn,则运行以下命令:
yarn add @marcusstenbeck/graphql-yoga
安装完成后,我们可以将它添加到我们的项目中,例如:
const { GraphQLServer } = require('@marcusstenbeck/graphql-yoga')
第二步:定义 Schema
在 GraphQL 中,schema 定义了哪些数据可以查询,以及如何查询这些数据。下面是一个简单的示例 schema:
const typeDefs = ` type Query { hello: String! } `
在这个 schema 中,我们定义了一个 Query 类型,它有一个名为 hello 的字段,它返回一个字符串。如果我们希望将该 schema 应用于我们的应用程序,我们需要将它传递给 GraphQLServer 的 typeDefs 参数中,例如:
-- -------------------- ---- ------- ----- - ------------- - - --------------------------------------- ----- -------- - - ---- ----- - ------ ------- - - ----- --------- - -- ----- ------ - --- --------------- --------- --------- -- --------------- -- ------------------- -- ------- -- -----------------
在这个示例中,我们也传递了一个空的 resolvers 对象,因为我们暂时没有需要解析的字段。
第三步:定义 Resolvers
resolver 告诉 GraphQL 如何解析我们的 schema 中的字段。下面是一个简单的 resolver 示例:
const resolvers = { Query: { hello: () => 'Hello World!' } }
在这个示例中,我们定义了一个 hello
字段的 resolver,它返回字符串 "Hello World!"
。我们需要将 resolvers 对象传递给 GraphQLServer 的 resolvers 参数:
-- -------------------- ---- ------- ----- - ------------- - - --------------------------------------- ----- -------- - - ---- ----- - ------ ------- - - ----- --------- - - ------ - ------ -- -- ------ ------- - - ----- ------ - --- --------------- --------- --------- -- --------------- -- ------------------- -- ------- -- -----------------
在将 resolvers 添加到我们的应用程序后,我们可以使用 graphql-yoga 库的自动 GraphQL Playground 提供的 GraphQL IDE 来测试我们的 schema。可以在本地服务器上访问该端点 http://localhost:4000。
第四步:添加更多功能
我们可以通过添加更多类型和字段来扩展和增强我们的 GraphQL API。下面是一个示例,其中包含解析器中的更多内容:
-- -------------------- ---- ------- ----- - ------------- - - --------------------------------------- ----- -------- - - ---- ----- - ------ ------- ----------------- ----- --------- ----- ----- ------- ------ -------- ---- - - ----- --------- - - ------ - ------ -- -- ------ -------- --------- -------- ----- -- - ----- ------ - -- --- ---- - - -- - - ------------- ---- - ----------------------------------- - -------------- -- ---- - ------ ------ -- ------- -- -- -------------- -------- -- -- ------------------------ - -- - - - - ----- ------ - --- --------------- --------- --------- -- --------------- -- ------------------- -- ------- -- -----------------
在这个示例中,我们定义了四个查询类型和它们的 resolver 函数:hello
、rollDice
、random
和 rollDie
。
我们也添加了两个参数来定义骰子的数量和数量的面数,返回骰子结果。
在 random
查询中,我们只是返回一个随机数。
在 rollDie
查询中,它返回一个 1 到 6 之间的随机整数。
值得注意的是,argument args
包含我们从请求接收到的参数。在我们的 rollDice
查询中,我们使用了 args.numDice
和 args.numSides
。在调用该查询时,我们必须传递两个参数。可以在 Playground 中通过输入以下查询来测试:
query { rollDice(numDice: 2, numSides: 6) }
这个查询会返回两个骰子的结果。
结论
在这篇文章中,我们介绍了如何使用 npm 包 @marcusstenbeck/graphql-yoga 来创建一个 GraphQL 服务。我们已经学习了如何定义 schema 和 resolvers,以及如何添加更多的功能。这个库的易用性和功能强大,使得开发人员可以轻松地创建丰富的、可扩展的 GraphQL 服务。希望这篇文章能帮助你开始学习 GraphQL,并为你的下一个项目提供指导。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065f90238a385564ab6f84