对象类型、标量以及枚举是 GraphQL 中你唯一可以定义的类型种类。但是当你在 schema 的其他部分使用这些类型时,或者在你的查询变量声明处使用时,你可以给它们应用额外的类型修饰符来影响这些值的验证。我们先来看一个例子:
此处我们使用了一个 类型,并通过在类型名后面添加一个感叹号!
将其标注为非空。这表示我们的服务器对于这个字段,总是会返回一个非空值,如果它结果得到了一个空值,那么事实上将会触发一个 GraphQL 执行错误,以让客户端知道发生了错误。
# { "graphiql": true, "variables": { "id": null } }
query DroidById($id: ID!) {
droid(id: $id) {
}
列表的运作方式也类似:我们也可以使用一个类型修饰符来标记一个类型为 List
,表示这个字段会返回这个类型的数组。在 GraphQL schema 语言中,我们通过将类型包在方括号([
和 ]
)中的方式来标记列表。列表对于参数也是一样的运作方式,验证的步骤会要求对应值为数组。
非空和列表修饰符可以组合使用。例如你可以要求一个非空字符串的数组:
myField: null // 有效
myField: ['a', null, 'b'] // 错误
然后,我们来定义一个不可为空的字符串数组:
这表示数组本身不能为空,但是其可以包含空值成员:
myField: null // 错误
myField: [] // 有效
myField: ['a', 'b'] // 有效