GraphQL:不可为空 array/list
GraphQL: Non-nullable array/list
我现在正在学习 GraphQL,在浏览教程时遇到了我无法理解的行为。
假设我们在模式中定义了类型:
type Link {
id: ID!
url: String!
description: String!
postedBy: User
votes: [Vote!]!
}
由于文档 votes: [Vote!]!
意味着该字段应该是不可空的,数组本身也应该是不可空的。但就在该教程的作者展示了查询示例之后,对于某些链接,returns votes
字段的空数组。像这样:
{
"url": "youtube.com",
"votes": []
},
{
"url": "agar.io",
"votes": []
}
所以我的问题是:在 graphQL 模式中 "non-nullable" 不是指 "empty" 还是它只是 graphQL 服务器的某种错误行为(我的意思是 returns 数组什么都没有没有警告应该有一些由于模式)。
谢谢!
非空的意思就是它听起来的意思——不是空的。空数组不是 null -- 它仍然是 returning 一个值。
这里是摘要table:
declaration accepts: | null | [] | [null] | [{foo: 'BAR'}]
------------------------------------------------------------------------
[Vote!]! | no | yes | no | yes
[Vote]! | no | yes | yes | yes
[Vote!] | yes | yes | no | yes
[Vote] | yes | yes | yes | yes
[Vote!]!
表示字段(在本例中为 votes
)不能 return null
and 它必须解析到一个数组 和 ,该数组中的 none 个项目可以为 null。所以 []
和 [{}]
以及 [{foo: 'BAR'}]
都是有效的(假设 foo
是非空的)。但是,以下 会 抛出:[{foo: 'BAR'}, null]
[Vote]!
表示该字段不能 return 为空,但 returned 列表中的任何单个项目都可以为空。
[Vote!]
表示整个字段可以为null,但是如果是return一个值,则需要是一个数组,并且每一项在该数组中不能为空。
[Vote]
表示整个字段可以为null,但是如果是return一个值,则需要是一个数组。但是,数组的任何成员也可以为空。
如果您需要验证数组是否为空,则必须在您的解析器逻辑中进行。如果您希望 GraphQL 在数组为空时仍然抛出异常,只需让您的解析器 return 拒绝 Promise。
有关详细信息,您可以阅读 list and non-null section of the GraphQL introduction or take a look at the spec。
我现在正在学习 GraphQL,在浏览教程时遇到了我无法理解的行为。 假设我们在模式中定义了类型:
type Link {
id: ID!
url: String!
description: String!
postedBy: User
votes: [Vote!]!
}
由于文档 votes: [Vote!]!
意味着该字段应该是不可空的,数组本身也应该是不可空的。但就在该教程的作者展示了查询示例之后,对于某些链接,returns votes
字段的空数组。像这样:
{
"url": "youtube.com",
"votes": []
},
{
"url": "agar.io",
"votes": []
}
所以我的问题是:在 graphQL 模式中 "non-nullable" 不是指 "empty" 还是它只是 graphQL 服务器的某种错误行为(我的意思是 returns 数组什么都没有没有警告应该有一些由于模式)。
谢谢!
非空的意思就是它听起来的意思——不是空的。空数组不是 null -- 它仍然是 returning 一个值。
这里是摘要table:
declaration accepts: | null | [] | [null] | [{foo: 'BAR'}]
------------------------------------------------------------------------
[Vote!]! | no | yes | no | yes
[Vote]! | no | yes | yes | yes
[Vote!] | yes | yes | no | yes
[Vote] | yes | yes | yes | yes
[Vote!]!
表示字段(在本例中为 votes
)不能 return null
and 它必须解析到一个数组 和 ,该数组中的 none 个项目可以为 null。所以 []
和 [{}]
以及 [{foo: 'BAR'}]
都是有效的(假设 foo
是非空的)。但是,以下 会 抛出:[{foo: 'BAR'}, null]
[Vote]!
表示该字段不能 return 为空,但 returned 列表中的任何单个项目都可以为空。
[Vote!]
表示整个字段可以为null,但是如果是return一个值,则需要是一个数组,并且每一项在该数组中不能为空。
[Vote]
表示整个字段可以为null,但是如果是return一个值,则需要是一个数组。但是,数组的任何成员也可以为空。
如果您需要验证数组是否为空,则必须在您的解析器逻辑中进行。如果您希望 GraphQL 在数组为空时仍然抛出异常,只需让您的解析器 return 拒绝 Promise。
有关详细信息,您可以阅读 list and non-null section of the GraphQL introduction or take a look at the spec。