GraphQL查询-抑制非空错误并返回部分数据

问题描述 投票:0回答:1

我正在使用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)"
    }
  ]
}
amazon-web-services graphql aws-appsync
1个回答
0
投票

没有非null字段永远不能返回null。

如果请求该字段并将其解析为null,则GraphQL将返回错误。因为该字段不能为null,所以GraphQL将为父字段返回null。如果该字段也不为空,则它将为that字段的父级返回null,依此类推,直到命中可为空的父级字段或根(即data)。 spec中描述了此行为:

如果解析字段时抛出错误,则应将其视为字段返回null,并且必须在响应的“错误”列表中添加错误。

如果解析字段的结果为null(由于解析字段的函数返回null或发生错误),并且该字段属于Non-Null类型,则抛出字段错误。该错误必须添加到响应中的“错误”列表中...

由于非null类型的字段不能为null,所以传播字段错误以由父字段处理。如果父字段可能为null,则解析为null;否则,如果它是Non-Null类型,则该字段错误会进一步传播到其父字段...

如果从请求的根源到字段错误的源的所有字段都返回Non-Null类型,则响应中的“数据”条目应为null。

如果active为空,则为[[可能,则不应在架构中将其设为不可为空。

© www.soinside.com 2019 - 2024. All rights reserved.