GraphQL 查询 - 抑制非空错误并返回部分数据
Posted
技术标签:
【中文标题】GraphQL 查询 - 抑制非空错误并返回部分数据【英文标题】:GraphQL query - suppress non-null error and return partial data 【发布时间】:2020-08-31 18:20:14 【问题描述】:我正在使用 AppSync 和 DynamoDB。有没有办法抑制非空错误并为结果省略非空字段的graphql查询返回部分数据?例如,如果我运行以下查询:
query GetPerson
getPerson(id: "123")
name
active
在我的 AppSync 解析器中,我有决定是否返回 active
的值的逻辑。如果我决定不返回active
,则会收到以下回复:
"data":
"getPerson": null
,
"errors": [
"path": [
"getPerson",
"active"
],
"locations": null,
"message": "Cannot return null for non-nullable type: 'Boolean' within parent 'Person' (/getPerson/active)"
]
因为在我的架构中,active
字段不为空。是否有任何方法可以抑制此错误并返回部分数据(即name
的值)?我想得到这样的回应:
"data":
"getPerson":
"name": "Jane Doe"
,
"errors": [
"path": [
"getPerson",
"active"
],
"locations": null,
"message": "Cannot return null for non-nullable type: 'Boolean' within parent 'Person' (/getPerson/active)"
]
【问题讨论】:
【参考方案1】:没有。非 null 字段永远不应返回 null。
如果请求该字段并且它解析为 null,GraphQL 将返回错误。由于该字段不能为 null,GraphQL 将为父字段返回 null。如果该字段也是非空的,它会为 那个 字段的父字段返回空值......等等,直到它碰到一个可以为空的父字段或根(即data
)。 spec 中描述了此行为:
如果在解析字段时抛出错误,则应将其视为该字段返回 null,并且必须将错误添加到响应中的“错误”列表中。
如果解析字段的结果为 null(因为解析该字段的函数返回 null 或发生错误),并且该字段是 Non-Null 类型,则抛出字段错误。错误必须添加到响应中的“错误”列表中...
由于 Non-Null 类型的字段不能为 null,因此字段错误会被传播以由父字段处理。如果父字段可能为null,则解析为null,否则如果是Non-Null类型,则字段错误进一步传播到其父字段...
如果从请求根到字段错误源的所有字段都返回Non-Null类型,那么响应中的“数据”条目应该为null。
如果active
为空可能,那么您不应该在您的架构中使其不可为空。
【讨论】:
以上是关于GraphQL 查询 - 抑制非空错误并返回部分数据的主要内容,如果未能解决你的问题,请参考以下文章
GraphQL 查询返回错误“不能为不可为空的字段返回 null”