学习GraphQL的最佳方式:基于Node.js的教程
GraphQL是一个用于API的查询语言和运行时环境。它允许您描述应用程序中的数据要求,并使客户端能够准确地获取所需的数据。GraphQL比RESTful接口更加灵活和高效,并且在现代Web开发中越来越受欢迎。本文将教您如何在Node.js中学习和使用GraphQL。
安装GraphQL
首先,我们需要安装Node.js和npm。然后在您的项目根目录中,运行以下命令安装graphql:
npm install graphql
安装完成后,我们可以在Node.js中创建一个GraphQL服务器。
创建GraphQL服务器
我们将使用Express框架来创建GraphQL服务器。在项目根目录中,使用npm来安装Express。
npm install express
接下来,创建一个server.js文件,并编写以下代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - ----------- - - --------------------------- ----- - ----------- - - ------------------- ----- ------ - ------------- ---- ----- - ------ ------ - --- ----- ---- - - ------ -- -- ------ -------- -- ----- --- - ---------- ------------------- ------------- ------- ------- ---------- ----- --------- ----- ---- ---------------- -- -- - -------------------- - ------- --- ------ -- -------------------------------- ---
上述代码创建了一个GraphQL服务器,它将“Hello World!”作为响应返回。现在启动服务器,访问http://localhost:4000/graphql,并在GraphQL playground中查询hello字段,您应该会得到“Hello World!”作为响应。
了解GraphQL架构
GraphQL的主要构建块是架构和类型。GraphQL架构定义了可用于查询的数据集,而类型则定义了数据的结构。需要先了解GraphQL架构的基础概念。
类型
GraphQL有两类类型:标量类型和对象类型。标量类型是原始类型,如整数、字符串和布尔值。GraphQL提供了一组标量类型,例如Int,String和Boolean。对象类型包含多个字段,并且每个字段都有其类型和参数。对象类型可以嵌套,因此您可以创建深度嵌套的类型,以表示递归数据结构。
架构
在GraphQL中,架构由类型、查询、变异和订阅组成。查询是从GraphQL服务器获取数据的方式,变异用于修改数据,而订阅用于实时数据推送。
了解GraphQL查询
创建GraphQL查询是通过定义查询类型来实现的。每个查询类型定义了一组可用于查询的字段。让我们在现有的GraphQL服务器中添加一个名称字段。
首先,更新schema定义:
const schema = buildSchema(` type Query { hello: String name: String } `);
然后,更新root定义:
const root = { hello: () => 'Hello World!', name: () => 'John', };
现在,通过运行以下查询,您将获得名称“John”作为响应。
{ name }
了解GraphQL变异
变异用于修改存储在GraphQL服务器中的数据。每个变异类型定义了一组可供使用的参数和要执行的操作。在变异操作中,请勿直接操作数据库 - 这是由数据持久性层(例如ORM或Mongoose)处理的。
让我们使用变异来添加一个用户。首先,更新schema定义:
-- -------------------- ---- ------- ----- ------ - ------------- ---- ---- - --- --- ----- ------- ------ ------- - ----- --------- - ----- ------- ------ ------- - ---- -------- - ----------------- ------------ ---- - ---
这个schema定义了一个User类型,其中包含id、name和email字段。我还定义了一个UserInput类型,它表示输入参数。在Mutation类型中,我定义了一个名为createUser的变异,它接受一个UserInput对象,然后返回创建的用户。
接下来,更新root定义:
-- -------------------- ---- ------- ----- ----- - - - --- -- ----- ------- ------ ------------------- -- -- ----- ---- - - ------ -- -- ------ -------- ----- -- -- ------- ----------- -- ----- -- -- - ----- -- - ------------ - -- ----- - ----- ----- - - ------ ----- ---- - - --- ----- ----- -- ----------------- ------ ----- - --
现在,您可以通过运行以下变异来添加一个新的用户:
-- -------------------- ---- ------- -------- - ----------------- - ----- ------- ------ ------------------ -- - -- ---- ----- - -
您应该会得到一个响应,其中包含创建的用户信息。
了解GraphQL订阅
订阅用于实时数据推送。它是一个WebSocket连接,它可以从服务器订阅消息,以便在推送到客户端时立即接收。
让我们使用GraphQL订阅来实现一个简单的聊天应用程序。首先,更新schema定义:
-- -------------------- ---- ------- ----- ------ - ------------- ---- ------- - --- --- ----- ------- - ---- ------------ - ------------- -------- - ---- -------- - ---------------- --------- -------- - ---
这个schema定义了一个Message类型,它有id和text字段。在Subscription类型中,我定义了一个messageAdded订阅。在Mutation类型中,我定义了一个addMessage变异,它接受一个文本输入参数,并返回消息对象。
接下来,更新root定义:
-- -------------------- ---- ------- ----- -------- - - - --- -- ----- ------ -------- -- -- --- ------ - --------------- - -- ----- ---- - - ------------- - ---------- -- -- ---------------------------------------- -- ----------- -- ---- -- -- - ----- ------- - - --- --------- ----- -- ----------------------- ------------------------------- - ------------- ------- --- ------ -------- - --
在这里,我将消息数组存储在内存中,创建了nextId变量和一个名为pubsub的PubSub对象。在messageAdded字段中,我订阅了一个名为“MESSAGE_ADDED”的频道。在addMessage变异中,我创建了一个新消息,将其推送到消息数组中,并使用pubsub发布了一个名为messageAdded的事件,该事件随着新消息一起发送。
在订阅页面中,我们需要打开一个WebSocket连接,并使用graphql.js客户端在服务器上订阅消息。使用以下代码订阅服务器上的新消息:
-- -------------------- ---- ------- ----- -- - --- ----------------------------------------- --------------------------- -- -- - ----- ----- - ------------- - ------------ - -- ---- - --- ----- ------- - --------------------------------- ----- ------------------ - -------------------------------------------- ----- ------ - --- ------------------------------------------------- --- --------- ----- ---------- - ---------------- ----- --- ----------------------------- -- - ---------------- -------- ----------------------------------- --- ---
现在,每当执行addMessage变异时,客户端将接收到新消息。
结论
通过Node.js学习GraphQL是一种有效的方式,但在您学习之前需要了解一些基本概念。在本文中,我们学习了GraphQL的类型、架构、查询、变异和订阅,并了解了如何在GraphQL服务器和客户端中使用它们。希望这篇文章可以帮助您开始使用GraphQL,构建优秀的Web应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67247a952e7021665e13aad5