我是graphql的新手,想在这里了解这个概念。我有这个graphql模式(使用图形工具缝合)。并非所有汽车都已注册。因此,如果我查询5辆汽车,而一辆汽车没有注册(没有ID可以在汽车和注册之间建立链接),则整个查询都会失败。
我该如何处理并为那1辆车返回null,并为另外4辆车返回注册详细信息?
{
Vehicles {
Cars {
id
registration {
id
}
}
}
}
答案 0 :(得分:1)
如果您将一个字段标记为non-null(通过将!
附加到类型上),然后将该字段解析为null,则GraphQL总是 抛出错误-这就是不可避免的。如果在您的API的正常操作中某个字段可能以null结尾,则您应该将其设置为null 。
但是,错误"bubble up"到最近的可为空字段。
因此给出了这样的模式:
type Query {
cars: [Car!]!
}
type Car {
registration: Registration!
}
和该查询
{
cars {
registrations
}
}
将registration
到Car
的任何一个null
字段都将解析为以下内容,因为cars
字段为非空且每个单独的Car
也不得为null
:
{
"data": null,
"errors": [...]
}
如果您将汽车字段设为可空([Car!]
),则错误将在此处停止:
{
"data": {
"cars": null
},
"errors": [...]
}
但是,您可以使每个Car
可为空(无论该字段是否为空),这将使错误在此停止并导致对象和null的数组(错误的汽车为null)。因此,将cars
类型设为[Car]!
或[Car]
将会给我们:
{
"data": {
"cars": [{...}, {...}, null]
},
"errors": [...]
}