解析 GraphQL 的 Schema 第二步:Fields

阅读时长 4 分钟读完

在上一篇文章中,我们介绍了 GraphQL 的 Schema 中的 Type。现在,我们将深入了解 Type 中的一部分:Fields。

在 GraphQL 中,Fields 是一个 Type 中的属性,它描述了这个 Type 的数据结构。一个 Field 包含了一个名称和一个类型,它可以代表一个单独的值(Scalar Type),一个子集合(Object Type)或者一个列表值(List Type)。

Fields 的定义

在 GraphQL 的 Schema 中,我们使用以下语法来定义一个 Field:

其中,需注意以下几点:

  • Field name 必须是唯一的。
  • FieldType 可以是一个 Scalar Type、Object Type 或者 List Type。
  • 我们可以使用括号来指定 Field 的参数。

Scalar Type 的 Fields

Scalar Type(标量类型)是一种简单的数据类型,它代表一个标准的 JavaScript 数据类型,如 String、Boolean、Int、Float、ID 等等。在 Scalar Type 中,Fields 只能是一个值,而不能是一个列表或对象。

下面是一个例子,展示如何在 GraphQL Schema 中定义一个 Scalar Type:

在上面的例子中,我们定义了一个 Person Type,它具有三个 Fields,分别为 name,email 和 age。它们的 FieldType 分别为 String 和 Int。

Object Type 的 Fields

Object Type(对象类型)代表了一个复杂的数据结构,它由多个 Scalar Type、Object Type 和 List Type 组成。Object Type 中的 Field 可以包含 Scalar Type、Object Type 或 List Type。

在 GraphQL Schema 中,我们使用以下语法来定义一个 Object Type:

在上面的例子中,我们定义了一个 Person Type,并增加了一个 address Field。这个 Field 的 FieldType 是一个新的 Object Type Address,它代表一个地址对象。

List Type 的 Fields

List Type(列表类型)代表了一个包含多个相同类型值的集合。在 GraphQL Schema 中,我们使用中括号([])来标识一个 List Type。

下面是一个例子,展示如何在 GraphQL Schema 中定义一个包含 List Type 的 Object Type:

在上面的例子中,我们定义了一个 Movie Type,其中增加了一个 actors Field,它是一个包含多个 Person 对象的列表。

使用 Fields

使用 GraphQL 的 Query 语言,我们可以查询一个 Schema 中的 Fields 数据。下面是一个简单的例子:

在上面的例子中,我们查询了 Person Type 中的三个 Fields:name、email 和 age。GraphQL 会返回我们所需要的数据,而且它会返回每个 Field 的具体值。

总结

Fields 是 GraphQL Schema 中的一个重要部分,它代表了一个 Type 的数据结构。通过了解 Fields,我们可以更好地理解 GraphQL 的 Schema,如何定义它,如何使用它并如何查询它。

本文介绍了 Scalar Type、Object Type 和 List Type 中 Field 的定义和使用,希望可以帮助你更好地使用 GraphQL。

示例代码

下面是一个完整的 GraphQL Schema 示例代码,它包含 Scalar Type、Object Type 和 List Type:

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

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

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

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

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

纠错
反馈