学习 GraphQL 的最佳方式:基于 Node.js 的教程

阅读时长 8 分钟读完

学习GraphQL的最佳方式:基于Node.js的教程

GraphQL是一个用于API的查询语言和运行时环境。它允许您描述应用程序中的数据要求,并使客户端能够准确地获取所需的数据。GraphQL比RESTful接口更加灵活和高效,并且在现代Web开发中越来越受欢迎。本文将教您如何在Node.js中学习和使用GraphQL。

安装GraphQL

首先,我们需要安装Node.js和npm。然后在您的项目根目录中,运行以下命令安装graphql:

安装完成后,我们可以在Node.js中创建一个GraphQL服务器。

创建GraphQL服务器

我们将使用Express框架来创建GraphQL服务器。在项目根目录中,使用npm来安装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定义:

然后,更新root定义:

现在,通过运行以下查询,您将获得名称“John”作为响应。

了解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

纠错
反馈