GraphQL编程框架:如何快速开发GraphQL应用

阅读时长 11 分钟读完

GraphQL是一种用于API开发的查询语言和运行时环境。它允许您描述应用程序中的数据要求,并定义API端点以响应这些请求。借助GraphQL,您可以将不同数据源的信息聚合在一起,将多个REST请求组合为单个查询,并减少在客户端和服务器之间传输的冗余数据。

在本文中,我们将探讨如何使用GraphQL编程框架快速开发GraphQL应用。我们将涵盖以下内容:

  • GraphQL的基础知识
  • GraphQL编程框架的使用
  • 如何创建GraphQL应用
  • GraphQL的高级功能

GraphQL基础知识

在开始深入探讨GraphQL编程框架之前,让我们先了解一些GraphQL的基础知识。

查询和变更

GraphQL支持两种类型的操作:查询和变更。查询用于检索数据,变更用于更改数据。

例如,以下是一个查询,用于检索所有用户的名称和电子邮件地址:

以下是一个变更,用于创建新用户并返回其ID:

类型系统

GraphQL使用类型系统来定义查询和变更的输入和输出。每个GraphQL服务都有一个类型定义,其中包含类型和字段的列表。这些类型和字段定义了API可以查询和更改的数据。

以下是一个使用GraphQL SDL(Schema Definition Language)编写的示例类型定义:

-- -------------------- ---- -------
---- ----- -
  ------ -------
  -------- ----- ----
-

---- -------- -
  ---------------- -------- ------ --------- -----
-

---- ---- -
  --- ---
  ----- -------
  ------ -------
-

此类型定义定义了三个类型:QueryMutationUserQuery类型定义了usersuser字段,分别用于检索所有用户和根据ID检索单个用户。Mutation类型定义了createUser字段,用于创建新用户。User类型定义了用户的属性,包括ID,名称和电子邮件地址。

解析器

GraphQL请求由解析器处理。解析器负责确定如何执行给定查询或变更的数据检索和更改。解析器解析查询和变更,并执行相应的操作。

例如,在上面示例的类型定义中,让我们看一下Query类型的users字段。users字段通过users解析器执行,该解析器从数据库中检索所有用户并将它们作为结果返回。类似地,Mutation类型的createUser字段使用createUser解析器将新用户插入到数据库中。

GraphQL编程框架的使用

现在我们已经了解了GraphQL的一些基础知识,让我们看一下如何使用GraphQL编程框架来快速开发GraphQL应用。

选择GraphQL编程框架

GraphQL编程框架有许多选择,包括Apollo Server,graphql-yoga和Prisma。这些框架提供了许多功能,例如自动创建GraphQL类型,运行时验证和请求缓存。选择最适合您的应用程序的框架。

在本文中,我们将使用Apollo Server。

安装和配置Apollo Server

安装Apollo Server:

配置Apollo Server来使用我们之前定义的类型定义:

-- -------------------- ---- -------
----- - ------------- --- - - -------------------------

----- -------- - ----
  ---- ----- -
    ------ -------
    -------- ----- ----
  -

  ---- -------- -
    ---------------- -------- ------ --------- -----
  -

  ---- ---- -
    --- ---
    ----- -------
    ------ -------
  -
--

----- --------- - -
  ------ -
    ------ -- -- ------
    ----- -------- - -- -- -- --------------- -- ------- --- ----
  --
  --------- -
    ----------- -------- - ----- ----- -- -- -
      ----- ---- - - --- ------------------- - --- ----- ----- --
      -----------------
      ------ -----
    --
  --
--

----- ------ - --- -------------- --------- --------- ---

----------------------- --- -- -- -
  ------------------- ----- -- ---------
---

这将创建一个GraphQL服务,该服务使用我们之前定义的类型和解析器来执行查询和变更。

运行GraphQL查询

现在,让我们尝试使用GraphQL编程框架运行查询。在浏览器中访问http://localhost:4000,可以使用GraphQL Playground交互式地发送查询。

例如,以下查询将检索所有用户的名称和电子邮件地址:

Click the Run button and you should see a response with the names and email addresses of all users.

我们还可以运行变更以创建新用户:

Click the Run button and you should see a response with the ID, name, and email address of the new user.

GraphQL的高级功能

现在我们已经完成了一个基本的GraphQL应用程序,让我们看看一些高级功能。

数据加载器

数据加载器是一种用于GraphQL服务的性能优化技术。它允许您批量检索数据并在请求期间缓存数据。例如,如果您在查询中多次请求相同的数据,数据加载器将从缓存中返回数据,而不是再次检索数据。

以下是使用数据加载程序的示例类型定义:

-- -------------------- ---- -------
---- ----- -
  -------- ----- ----
-

---- ---- -
  --- ---
  ----- -------
  ------ -------
  ------ -------
-

---- ---- -
  --- ---
  ------ -------
  -------- -------
-

以下是使用数据加载程序的示例解析器:

-- -------------------- ---- -------
----- ---------- - ----------------------

----- ----------- - --- ---------------- --------- -- -
  ----- ----- - ----- ----------------------------- --------- - ---- ------- - -------------
  ----- ----------- - ------------------ -- ----------------- -- ------------- --- ---------
  ------ ------------
---

----- --------- - -
  ------ -
    ----- -------- - -- -- -- --------------- -- ------- --- ----
  --
  ----- -
    ------ -------- -- ----------------------------
  --
--

这里,我们使用了dataloader模块创建了一个数据加载器,该模块将所有用户的ID作为输入,并返回每个用户的帖子列表。

User类型的posts字段解析器中,我们使用数据加载器来获取用户的帖子。将用户的ID传递给数据加载器,数据加载器将检索缓存中的帖子列表。如果在缓存中找不到帖子,则数据加载器将从数据库中检索帖子,并将其添加到缓存中。

订阅和实时数据

GraphQL还支持实时数据的推送。使用GraphQL Subscriptions,您可以在服务器端推送数据,并使用Websockets在客户端实时接收数据。

以下是使用GraphQL Subscriptions的示例类型定义:

-- -------------------- ---- -------
---- ----- -
  -------- ----- ----
-

---- ------------ -
  -------- ----
-

---- ---- -
  --- ---
  ----- -------
  ------ -------
-

---- -------- -
  ---------------- -------- ------ --------- -----
-

这里,我们定义了一个名为newUser的新订阅,该订阅在服务器端有新用户被创建时返回该用户。

以下是使用GraphQL Subscriptions的示例代码:

-- -------------------- ---- -------
----- - ------------- ---- ------ - - -------------------------

----- ------ - --- ---------

----- -------- - ----
  ---- ----- -
    -------- ----- ----
  -

  ---- ------------ -
    -------- ----
  -

  ---- ---- -
    --- ---
    ----- -------
    ------ -------
  -

  ---- -------- -
    ---------------- -------- ------ --------- -----
  -
--

----- --------- - -
  ------ -
    ----- -------- - -- -- -- --------------- -- ------- --- ----
  --
  ------------- -
    -------- -
      ---------- -- -- -----------------------------------
    --
  --
  --------- -
    ----------- -------- - ----- ----- -- -- -
      ----- ---- - - --- ------------------- - --- ----- ----- --
      -----------------
      -------------------------- - -------- ---- ---
      ------ -----
    --
  --
--

----- ------ - --- -------------- --------- --------- ---

----------------------- --- -- -- -
  ------------------- ----- -- ---------
---

这里,我们使用PubSub模块创建一个新的发布/订阅实例。在createUser变更解析器中,我们向发布中心发布新用户事件。在newUser订阅解析器中,我们创建一个新的订阅器并从发布中心订阅NEW_USER事件。

现在,在客户端上,您可以使用Websockets订阅一个名为newUser的新订阅,以接收实时用户数据:

-- -------------------- ---- -------
----- ------ - ----------------------

----- ------ - --- -------------------------- -
  ---------- -----
---

----- ----- - ----
  ------------ -
    ------- -
      --
      ----
      -----
    -
  -
--

---------------- ----- --------------
  ----- ---- -- ------------------------- ------ ------
---

这将在客户端上打印所有新用户。每当在服务器端创建新用户时,此订阅将自动更新以显示新用户的数据。

结论

GraphQL编程框架是快速开发GraphQL应用程序的有用工具。它为开发人员提供了许多便利功能,并使开发人员能够更轻松地构建客户端和服务器之间的交互。在本文中,我们从GraphQL的基础知识开始,了解了GraphQL编程框架的使用,并介绍了一些高级功能。我们希望本文对您有所帮助,并希望您可以尝试使用GraphQL编程框架构建您自己的GraphQL应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672360022e7021665e0fcf19

纠错
反馈