Что `... on` делает в этом GraphQL? - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь имитировать c, что делает какой-то GraphQL, но у меня нет доступа, чтобы иметь возможность запустить оригинал. Он имеет вид:

query {
  dataSources(dataType: Ais) {
    ... on AisDataSource {
      messages(filter: {broadcastType: Static}) {
        ... on AisStaticBroadcast {
          field1
          field2

(я пропустил закрывающие скобки).

Насколько я понимаю, ... on должен включать фрагмент (здесь нет ни одного), или выбирать между альтернативами (но они вложенные). Так что этот запрос неверен, или есть что-то еще для ... on?

1 Ответ

1 голос
/ 30 апреля 2020

Это

{
  user {
    ... on User {
      id
      username
    }
  }
}

и

{
  user {
    ...UserFragment
  }
}

fragment UserFragment on User {
  id
  username
}

эквивалентны. В обоих случаях вы используете фрагмент. В первом примере мы просто ссылаемся на фрагмент как встроенный фрагмент .

При запросе поля, которое возвращает составной тип (объект, интерфейс или объединение ), вы должны указать набор выбора или одно или несколько полей для типа возвращаемого значения. Поскольку фрагменты должны включать условие типа (ключевое слово on плюс имя типа), их можно использовать для указания различных наборов выбора в зависимости от типа, который фактически возвращается во время выполнения.

{
  user {
    ...RegularUserFragment
    ...AdminFragment
  }
}

fragment RegularFragment on RegularUser {
  id
  username
}
fragment AdminFragment on Admin {
  id
  username
  accessLevel
}

Все, что мы говорим: «если тип во время выполнения такой, то вернуть этот набор полей». Если какое-либо из полей внутри фрагмента также возвращает составной тип, тогда эти поля также должны указывать набор выбора для - это означает, что дополнительные фрагменты могут использоваться внутри этих наборов выбора.

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