处理子查询中的 graphql 模式拼接错误
Posted
技术标签:
【中文标题】处理子查询中的 graphql 模式拼接错误【英文标题】:Handle graphql schema stitching error in child query 【发布时间】:2019-11-07 03:17:25 【问题描述】:我是 graphql 的新手,想了解这里的概念。我有这个 graphql 模式(使用图形工具缝合)。并非所有汽车都有注册。因此,如果我查询 5 辆汽车,而一辆汽车没有注册(没有 id 来链接汽车和注册),我的整个查询都会失败。
我该如何处理并为那 1 辆车返回 null 并为其他 4 辆车返回注册详细信息?
Vehicles
Cars
id
registration
id
【问题讨论】:
【参考方案1】:如果您将字段标记为 non-null(通过将 !
附加到类型)然后将该字段解析为 null,GraphQL 将总是抛出错误 - 这是不可避免的。如果在您的 API 的正常操作中某个字段可能最终为 null,您可能应该将其设为可空。
但是,错误 "bubble up" 到最近的可为空字段。
所以给定这样的架构:
type Query
cars: [Car!]!
type Car
registration: Registration!
还有这个查询
cars
registrations
将任何Car
的registration
字段解析为null
将导致以下结果,因为cars
字段不为空并且每个单独的Car
也不得为null
:
"data": null,
"errors": [...]
如果您将 cars 字段设置为可空 ([Car!]
),则错误将停止:
"data":
"cars": null
,
"errors": [...]
但是,您可以将每个Car
设为可空(无论该字段是否为空),这将使错误停在那里并产生一组对象和空值(空值是出错的汽车)。所以制作cars
类型[Car]!
或[Car]
会给我们:
"data":
"cars": [..., ..., null]
,
"errors": [...]
【讨论】:
以上是关于处理子查询中的 graphql 模式拼接错误的主要内容,如果未能解决你的问题,请参考以下文章
Gatsby - 如何使用 GraphQL 查询 src/data/ 子文件夹中的所有 YAML
Redshift 中的 DAU WAU MAU 错误:[Amazon](500310) 无效操作:由于内部错误,不支持此类关联子查询模式;