Можно ли пропустить возвращаемые поля вместо нуля для полей, допускающих обнуление в GraphQL? - PullRequest
0 голосов
/ 04 марта 2019

Допустим, у меня есть следующий тип:

type Person {
  id: String!
  name: String!
  email: String
}

Поле электронной почты может быть null.При возврате Person из распознавателя можно ли просто не возвращать поле электронной почты для объекта Person, например:

{
  id: '1056'
  name: 'Bob Smith',
}

Вместо:

{
  id: '1056'
  name: 'Bob Smith',
  email: null
}

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Да , вы можете опустить это свойство из значения, возвращенного в распознавателе родительского поля.

Каждое поле в вашей схеме имеет распознаватель по умолчанию, который запускается, если вы не укажетерешать самостоятельно (при условии, что решатель запускается в первую очередь).В вашем примере, если мы опускаем распознаватель для email, распознаватель по умолчанию будет эффективно выполнять следующие действия:

  • Искать свойство с именем email для значения, разрешенного родительским полем (вв этом случае объект Person)
  • Если свойство найдено, оно будет преобразовано в значение свойства - если свойство является функцией, оно сначала вызовет функцию и разрешит возвращенноезначение
  • Если свойство не найдено, оно будет иметь нулевое значение

Другими словами, если свойство с тем же именем, что и у поля, не существует в родительском значении, поле всегда будет иметь нулевое значение по умолчанию.Также стоит отметить, что GraphQL не имеет понятия undefined, только null.В GraphQL.js неопределенные значения всегда приводятся к null.

0 голосов
/ 04 марта 2019

В GraphQL вы всегда возвращаете то, что запрашивает потребительское приложение (веб-интерфейс / запрос).

Итак, если кто-то запрашивает пользователя как:

query getUser {
  user {
   id
   name
   email
  }
}

и если адрес электронной почты будет нулевым, то результатом будет:

{
  id: '1056'
  name: 'Bob Smith',
  email: null
}

, но если вы измените запрос потребителя, чтобы он запрашивал только id и name, он не будет возвращать письмо.

Вы не можете определить распознаватель, который возвращает только если не ноль.

...