我是 graphql 的新手,想在这里理解这个概念。我有这个 graphql 模式(使用图形工具缝合)。并非所有汽车都有注册。因此,如果我查询 5 辆汽车,而一辆汽车没有注册(没有 id 来链接汽车和注册),我的整个查询都会失败。
我该如何处理这个问题并为那 1 辆车返回 null 并为其他 4 辆车返回注册详细信息?
{
Vehicles {
Cars {
id
registration {
id
}
}
}
}
我是 graphql 的新手,想在这里理解这个概念。我有这个 graphql 模式(使用图形工具缝合)。并非所有汽车都有注册。因此,如果我查询 5 辆汽车,而一辆汽车没有注册(没有 id 来链接汽车和注册),我的整个查询都会失败。
我该如何处理这个问题并为那 1 辆车返回 null 并为其他 4 辆车返回注册详细信息?
{
Vehicles {
Cars {
id
registration {
id
}
}
}
}
如果您将一个字段标记为非空(通过附加!
到类型)然后将该字段解析为空,GraphQL 将始终抛出一个错误——这是不可避免的。如果一个字段在您的 API 的正常操作中可能以 null 结束,您可能应该将其设为 nullable。
但是,错误“冒泡”到最近的可为空字段。
所以给定这样的模式:
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
以为空(无论该字段是否为空),这将使错误停在那里并导致一个对象数组和空值(空值是出错的汽车)。所以制作cars
类型[Car]!
or[Car]
会给我们:
{
"data": {
"cars": [{...}, {...}, null]
},
"errors": [...]
}