在上一篇文章中,我们介绍了 GraphQL 的 Schema 中的 Type。现在,我们将深入了解 Type 中的一部分:Fields。
在 GraphQL 中,Fields 是一个 Type 中的属性,它描述了这个 Type 的数据结构。一个 Field 包含了一个名称和一个类型,它可以代表一个单独的值(Scalar Type),一个子集合(Object Type)或者一个列表值(List Type)。
Fields 的定义
在 GraphQL 的 Schema 中,我们使用以下语法来定义一个 Field:
fieldname: FieldType
其中,需注意以下几点:
- 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:
type Person { name: String email: String age: Int }
在上面的例子中,我们定义了一个 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:
type Person { name: String email: String age: Int address: Address }
在上面的例子中,我们定义了一个 Person Type,并增加了一个 address Field。这个 Field 的 FieldType 是一个新的 Object Type Address,它代表一个地址对象。
List Type 的 Fields
List Type(列表类型)代表了一个包含多个相同类型值的集合。在 GraphQL Schema 中,我们使用中括号([])来标识一个 List Type。
下面是一个例子,展示如何在 GraphQL Schema 中定义一个包含 List Type 的 Object Type:
type Movie { title: String actors: [Person] }
在上面的例子中,我们定义了一个 Movie Type,其中增加了一个 actors Field,它是一个包含多个 Person 对象的列表。
使用 Fields
使用 GraphQL 的 Query 语言,我们可以查询一个 Schema 中的 Fields 数据。下面是一个简单的例子:
{ person { name email age } }
在上面的例子中,我们查询了 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