Обработка ошибки сшивания схемы graphql в дочернем запросе - PullRequest
0 голосов
/ 25 июня 2019

Я новичок в graphql и хочу понять концепцию здесь. У меня есть эта схема graphql (сшитые с использованием графических инструментов). Не все автомобили имеют регистрацию. Поэтому, если я запрашиваю 5 автомобилей, и у одного автомобиля нет регистрации (нет идентификатора, связывающего автомобили с регистрацией), весь мой запрос не выполняется.

Как мне справиться с этим и вернуть ноль для этого 1 автомобиля и вернуть регистрационные данные для остальных 4?

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

1 Ответ

1 голос
/ 07 июля 2019

Если вы пометите поле как ненулевое (добавив ! к типу), а затем разрешите это поле равным нулю, GraphQL всегда выдаст ошибку -это неизбежно.Если для поля возможно завершить работу с нулевым значением в нормальной работе вашего API, , вы, вероятно, должны сделать его обнуляемым .

Однако ошибки "всплывают" к ближайшему обнуляемому полю.

Итак, нам дана такая схема:

type Query {
  cars: [Car!]!
}

type Car {
  registration: Registration!
}

и этот запрос

{
  cars {
    registrations
  }
}

, разрешающий поле registration для любого *От 1021 * до null приведет к следующему, поскольку поле cars не равно нулю, и каждый отдельный Car также не должен быть null:

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

Если вы задаете поле carsnullable ([Car!]), ошибка на этом остановится:

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

Однако, вы можете сделать каждый Car nullable (независимо от того, является ли поле или нет), что позволит ошибке прекратить там и привести кв массиве объектов и нулей (нулями являются автомобили, которые допустили ошибку).Таким образом, создание cars типа [Car]! или [Car] даст нам:

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