简介
GraphQL 是一种用于 API 构建的查询语言,它使得客户端可以精确地获取自己所需的数据。与 RESTful API 不同的是,GraphQL 中的数据查询是通过一个单一的入口点进行的,这样客户端可以避免请求多个端点以获取所有需要的数据。GraphQL 还提供了强大的类型系统,让开发者可以更加安全地进行数据查询。
graphql-yoga 是一个基于 Express 和 Apollo Server 的 GraphQL 服务器工具包,它简化了 GraphQL 的配置和启动流程,并提供了额外的功能,例如支持 GraphQL Playground、实时数据更新等。如果你想在自己的项目中使用 GraphQL,graphql-yoga 是一个不错的选择。
本文将介绍如何使用 npm 包 graphql-yoga 进行 GraphQL 服务器开发。
安装
安装 graphql-yoga 可以使用 npm:
npm install graphql-yoga
使用
graphql-yoga 提供简单的 API,可以很方便地启动你的 GraphQL 服务器。
首先,我们需要创建一个 schema
。schema
定义了你的 GraphQL 服务器所支持的查询和数据类型。你可以使用 GraphQL Schema Language 来定义你的 schema
。例如,以下是一个简单的 schema
:
type Query { hello: String! }
该 schema
定义了一个查询 hello
,它返回一个字符串类型的数据。
接下来,我们可以使用 graphql-yoga
创建一个服务器并指定 schema
:
-- -------------------- ---- ------- ----- - ------------- - - ----------------------- ----- -------- - - ---- ----- - ------ ------- - - ----- --------- - - ------ - ------ -- -- ------ ------- - - ----- ------ - --- --------------- --------- --------- -- --------------- -- ------------------- -- ------- -- -----------------
这个例子中,我们定义了 typeDefs
和 resolvers
,并将它们传递给 GraphQLServer
。typeDefs
定义了我们的 schema
,而 resolvers
定义了如何获取数据。在 resolvers
中,我们定义了一个 Query
类型,并在其中定义了 hello
字段。
最后,我们使用 server.start()
开始运行服务器。
现在,我们启动我们的服务器,然后在浏览器中打开 http://localhost:4000
,我们应该能够在 GraphQL Playground 中看到我们的 hello
查询:
query { hello }
这将返回:
{ "data": { "hello": "Hello World!" } }
其他配置
热重载
如果你在开发过程中需要修改代码并快速查看更改的效果,你可以使用 nodemon
和 graphiql
包来实现热重载。nodemon
会监视你的代码更改并重启服务器,而 graphiql
则提供了一个 Web 用于在浏览器中进行 GraphQL 查询的接口。
首先,我们创建一个 nodemon.json
文件来配置 nodemon
:
{ "exec": "babel-node", "ext": "js graphql", "ignore": ["node_modules/*"], "env": { "NODE_ENV": "development" } }
然后,我们安装 nodemon
和 graphiql
:
npm install nodemon graphiql
接下来,我们将 start
命令改成:
"start": "nodemon src/index.js --exec babel-node --use-strict --presets env,stage-3"
然后,在我们的 index.js
文件中添加以下代码:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- - --------------- - - --------------------------------- ----- - -------------------- - - ------------------------ ----- - -------- - - ------------------- ----- - --------- - - ---------------------- ----- --- - --------- ----- ------ - ---------------------- --------- --------- -- ------------------- ------------------ ---------------- ------ --- -------------------- ----------------- ------------ ----------- ------ -- ----- -- --- ---------------- -- -- - -------------------- ------ -- --- ------- -- ---------------------------------- -------------------- ---------- -- --- ------- -- ----------------------------------- --
这将启用 graphiql
,并在 http://localhost:4000/graphiql
上提供一个 Web 接口。
使用 DataLoader
DataLoader 是一种优化 GraphQL 数据访问的工具,它可以自动批量加载数据并减少重复加载。如果你的服务需要处理大量数据,DataLoader 可以帮助你优化性能。
以下是一个使用 DataLoader 的例子:
-- -------------------- ---- ------- ----- - ------------- - - ----------------------- ----- ---------- - --------------------- ----- ------------ - - ------ - - --- -- ----- ------- ---------- - -- - --- -- ----- -------- ---------- - - -- ---------- - - --- -- ----- ----- -- - --- -- ----- ---- - - - ----- -------- - - ---- ----- - -------- ------ ---- - ---- ---- - --- ---- ----- ------- -------- ------- - ---- ------- - --- ---- ----- ------- - - ----- --------- - - ------ - ----- --- - -- -- -- - ------ --------------------------- - -- ----- - -------- ------ -- - ------ ------------------------------------------ - - - ----- ------- - - ----------- --- -------------- -- ----------------- -------------- --- -------------- -- -------------------- - -------- --------------- - ------ -------------------------- -- ---------------------------- -- ------- --- ----- - -------- ------------------- - ------ -------------------------- -- ----------------------------------- -- ---------- --- ----- - ----- ------ - --- --------------- --------- ---------- -------- - ------- - -- --------------- -- ------------------- -- ------- -- -----------------
在这个例子中,我们定义了一个 user
查询和一个 User
类型,并在 User
类型中定义了 country
字段。loaders
对象包含了 userLoader
和 countryLoader
,它们分别用于批量加载用户和国家数据。batchUsers
和 batchCountries
方法实现了批量加载数据的逻辑。
使用 DataLoader 可以帮助我们优化数据加载性能。
结语
在本文中,我们介绍了使用 npm 包 graphql-yoga 进行 GraphQL 服务器开发的基本方法。如果你想进一步学习 GraphQL 的使用,可以参考 GraphQL 官方文档。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/195724