概述
在奥德赛升空 III, 我们学习到,我们可以为模式中的参数定义 字段,字段的解析器可以使用该字段。在该课程中,我们只为字段定义了一个参数,因此我们的模式保持相当简单清晰。
但在气闸中,我们的操作中有一些需要一次提供几个 参数。如何在保持模式易于读取的同时,还为解析器提供所需数据?答案是使用input
类型!
在本课程中,我们将
- 了解
input
类型 - 探究将
input
类型用于突变的好处 - 查看
input
类型在气闸代码库中如何使用的示例
input
类型是什么?
input
类型在 GraphQL 架构 中是一个特殊的 对象类型,它将一组 参数 组合在一起,然后可以将其用作另一个 字段 的参数。
使用 input
类型可以帮助我们对 参数 进行分组和理解,特别是对于 变异。例如,在 Airlock 中创建清单时,我们知道 操作 需要包括有关清单的大量数据 (标题、描述、照片缩略图、床位数、每晚费用、位置类型和便利设施)。我们 可以 在 createListing
变异 中列出所有这些 参数,但这可能会难以控制且难以理解。
相反,我们可以创建一个名为 CreateListingInput
的输入类型并列出那里所需的所有 字段。这样,我们可以让 变异 定义保持清晰,我们还可以在需要相同 参数 集的其他变异中重复使用该输入类型。
定义一个 input
若要定义输入类型,请使用 input
关键字,后跟名称和大括号 ({}
)。在大括号中,我们按常例列出 字段 和类型。请注意,输入类型的字段只能是 标量、枚举或另一个输入类型。
下面是基于 Airlock 模式的另一组输入类型的示例
input SearchListingsInput {checkInDate: String!checkOutDate: String!numOfBeds: Intpage: Intlimit: IntsortBy: SortByCriteria # this is an enum type}
使用 input
要在模式中使用 input
类型,我们可以将其设置为 字段 参数 的类型。例如,searchListings
查询 使用了 SearchListingsInput
类型,如下所示:
type Query {# ..."Search results for listings that fit the criteria provided"searchListings(criteria: SearchListingsInput): [Listing]!# ...}
注意:输入类型可在多个 操作 中重复使用,但在为查询和 mutations 使用 相同 的输入类型时要小心!某些 字段 在 mutations 中可能是必需的,但在查询中可能不是必需的。
有关更多详细信息,请查看 Apollo 关于输入类型的文档。
在 Airlock 代码库中查看
在 Airlock 模式中定义了多个输入。在 server/schema.graphql
文件中查看它们。
- 您对现有输入有什么看法?
- 如何使用输入在客户端代码中?
实践
input
类型?要点
- 输入
类型
是一个特殊的 对象类型用作 字段的参数。这使我们能够将所有参数分组在一起并理解它们,特别是对于 mutations。
接下来
在下一课中,我们将学习另一种分组相关属性的工具: 接口。