在 GraphQL 中使用扩展类型系统

阅读时长 6 分钟读完

GraphQL 是一个用于 API 开发的查询语言和运行时。在多个前端领域(尤其是 Web 和移动应用程序开发)中,它已被广泛采用。因为,它可以帮助开发人员高效地获取数据,并使得客户端应用程序的性能变得更加稳定。

扩展类型系统是 GraphQL 中一个强大的特性。借助扩展类型系统,应用程序可以快速、方便地扩展 GraphQL Schema。在本文中,我们将会详细介绍 GraphQL 的扩展类型系统,并结合示例代码来解释如何使用这个重要的特性。

GraphQL Schema

GraphQL Schema 定义了一个 GraphQL API 提供什么样的数据以及可用的数据操作。GraphQL Schema 是用 GraphQL Schema Definition Language 声明的,如下所示:

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

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

在上述示例中,我们有两个操作:

  1. 查询一个用户:向查询传递一个 ID 并获取相关用户信息。
  2. 获取所有的 users。

对于这些操作,我们定义了两个 types:Query 和 User。

Query type 是每个 GraphQL schema 的入口点。对于所有的查询操作,我们使用 Query。

User type 定义了我们要提供的数据类型。我们可以根据我们的需求定义不同的 types。

当我们需要为 GraphQL API 添加新功能时,我们可以利用 GraphQL 的扩展类型系统。

GraphQL 扩展类型系统

扩展类型系统允许我们将新类型,新字段和新操作添加到现有的 GraphQL schema 中。

在我们开始详细讨论扩展类型系统之前,让我们回顾一下 GraphQL schema 中的三大概念:

  • types:GraphQL schema 基石,用于定义 API 返回的数据类型。
  • fields:type 中的字段,用于表示查询得到的数据。
  • operations:GraphQL schema 中定义可用的操作。

在 type 上扩展字段

下面的示例演示了如何向 User type 添加新的字段。

我们使用 extend 指令来添加新的字段,如上所示。在这个例子中,我们添加了一个名为 address 的字段。

在 Query 类型上扩展操作

类似于在 types 上扩展,我们可以在 Query type 上扩展操作,如下所示:

在这个例子中,我们添加了一个名为 unapprovedUsers 的操作。

在 Mutation 类型上添加字段和操作

Mutation 类型和 Query 类型的使用方式相同。Mutation 类型定义操作,例如 create、update 和 delete。下面的示例演示了如何将其他字段添加到 Mutation 类型上。

在这里,我们添加了一个名为 approveUser 的操作,它对传递的 ID 调用 User type,并返回一个用户实例。

扩展枚举类型

还有一个类型适用于 GraphQL schema,那就是枚举类型。在 GraphQL API 中,我们可以使用枚举来表示可用值的前置选项。

下面的示例演示了如何定义一个枚举类型。

我们可以使用上述代码定义一个名为 Role 的枚举类型,其中包含三个选项:ADMIN、USER 和 MANAGER。

GraphQL 扩展类型系统示例

在下面的示例代码中,我们定义了一个 GraphQL schema,用于构建一个博客网站。我们使用 GitHub GraphQL API 来获取该博客网站的内容。

该博客网站将具有以下功能:

  • 获取文档列表:返回所有的文档列表。
  • 获取特定文档的内容:返回特定文档的名称、发布日期和内容。
  • 添加新文档:向博客添加新文档。

下面是 GraphQL schema 的定义:

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

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

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

在上述代码中,我们定义了三个 types(Query、Mutation 和 Post)。Query 和 Mutation 提供操作,并返回 Post 类型的数据。

通过使用 extend 指令,我们可以扩展 Post type,如下所示:

在我们的示例代码中,author 是 added field。使用传递到 our mutation 的数据,我们创建一个新的 Post,如下所示:

我们可以对该 mutation 的结果使用新的数据添加其他字段,例如 author。

我们还定义了一个新的 query 是用于返回所有文档的列表。

在博客应用中,我们还可能需要实现其他规范功能,例如搜索和评论。但是,本教程为您提供了一个基本的 GraphQL schema,演示了如何使用扩展类型系统。

结论

在本文中,我们详细讨论了 GraphQL schema,以及使用 GraphQL 扩展类型系统如何扩展现有 schema 的重要性。我们还提供了示例代码,演示了如何使用 GraphQL 扩展类型系统构建博客网站,以便帮助您更好地了解 GraphQL 的扩展类型系统。

我们强烈建议开发人员深入理解 GraphQL 扩展类型系统,并在日常开发中加以使用。这个强大的特性可以使作为潜在的事件源更可靠和可扩展。在日后的开发项目中,我们期望看到扩展类型系统在 GraphQL API 开发中的广泛应用。

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

纠错
反馈