0

我是 graphql 的新手,想在这里理解这个概念。我有这个 graphql 模式(使用图形工具缝合)。并非所有汽车都有注册。因此,如果我查询 5 辆汽车,而一辆汽车没有注册(没有 id 来链接汽车和注册),我的整个查询都会失败。

我该如何处理这个问题并为那 1 辆车返回 null 并为其他 4 辆车返回注册详细信息?

{
  Vehicles {
    Cars {
      id
      registration {
        id
      }
    }
  }
}
4

1 回答 1

2

如果您将一个字段标记为非空(通过附加!到类型)然后将该字段解析为空,GraphQL 将始终抛出一个错误——这是不可避免的。如果一个字段在您的 API 的正常操作中可能以 null 结束,您可能应该将其设为 nullable

但是,错误“冒泡”到最近的可为空字段。

所以给定这样的模式:

type Query {
  cars: [Car!]!
}

type Car {
  registration: Registration!
}

这个查询

{
  cars {
    registrations
  }
}

registration为任何人解析该字段Carnull导致以下结果,因为该cars字段为非空,并且每个人Car也不得为null

{
  "data": null,
  "errors": [...]
}

如果您将汽车字段设为可空 ( [Car!]),则错误将停在那里:

{
  "data": {
    "cars": null
  },
  "errors": [...]
}

但是,您可以使每个都可Car以为空(无论该字段是否为空),这将使错误停在那里并导致一个对象数组和空值(空值是出错的汽车)。所以制作cars类型[Car]!or[Car]会给我们:

{
  "data": {
    "cars": [{...}, {...}, null]
  },
  "errors": [...]
}
于 2019-07-06T21:11:57.070 回答