我在解释GraphQL规范的这一部分时遇到了一些麻烦。
https://facebook.github.io/graphql/#sec-Combining-List-and-Non-Null
1
如果List的修改类型是Non-Null,那么该List可能不是 包含任何空项。
2
如果Non-Null的修改类型是List,则不接受null, 但是接受一个空列表。
我假设这些的表示是
答案 0 :(得分:1)
你假设正确。有four possible combinations:
null // valid
[] // valid
['a', 'b'] // valid
['a', null, 'b'] // valid
null // valid
[] // valid
['a', 'b'] // valid
['a', null, 'b'] // invalid
null // invalid
[] // valid
['a', 'b'] // valid
['a', null, 'b'] // valid
null // invalid
[] // valid
['a', 'b'] // valid
['a', null, 'b'] // invalid
第一个问题:对于1,规范没有明确说空列表是无效的,不是吗?
它没有必要。默认情况下,GraphQL中的所有类型都可以为空,包括列表。上面的第一个例子适用。
第二个问题:如果没有修饰符(1),我是否应该能够提交一个包含空值的List(如下所示)?
是。 GraphQL spec section 5.3.3表明参数必须与模式中定义的类型兼容。
但实际上,发送包含null元素的列表是没用的。这可能就是为什么GraphiQL不适合它。
附注:关于何时使用非可空类型,this article可以添加一些观点,说明为什么在GraphQL API中使用可空类型可能是一个不错的选择,即使字段不应该为空。