Понимание типов GraphQL Union - PullRequest
       2

Понимание типов GraphQL Union

0 голосов
/ 07 февраля 2019

При экспериментировании с типами Union в GraphQL здесь: https://graphql.github.io/learn/schema/#union-types Я столкнулся со следующим:

enter image description here

Сначала я думал, чтополя, которые вы указываете в запросе, являются полями, в которых будет выполняться поиск текста: «Миллениум», однако это не так, потому что я все еще получаю данные «Сокола тысячелетия» даже после удаления поля имени из запроса для Startship type.

Я провел еще один тест: R2-D2 primaryFunction равен Astromech, если вы ищете Astromech, вы ничего не получите, даже если для Droid указано primaryFunctionтип.

1 Ответ

0 голосов
/ 07 февраля 2019

Обратите внимание, что имя по-прежнему указано на Starship, потому что в противном случае оно не будет отображаться в результатах, учитывая, что Starship не является персонажем!

Это просто означает, что, поскольку мы используемТип Union, учитывая два типа, которые являются частью Union и оба имеют поле name, вам все равно нужно запросить поле name для каждого типа во встроенном фрагменте.Пропуск name для фрагмента Starship, но включение его в Character означает, что если возвращаемый тип равен Character, поле имени будет присутствовать, но не будет присутствовать в типе Starship.

В документах упоминается об этом, чтобы подчеркнуть разницу между объединениями и интерфейсами. Если бы SearchResult был Интерфейсом, который включал поле name, а Character и Starship реализовали этот Интерфейс, вы могли бы сделать что-то вроде этого:

{
  search(text: "an") {
    name
    __typename
    ... on Human {
      height
    }
    ... on Droid {
      primaryFunction
    }
    ... on Starship {
      length
    }
  }
}

Но так как Союзыне гарантируйте, что какие-либо поля совместно используются их типами, это невозможно сделать с помощью Unions.

Что касается поиска, это не то, что встроено в GraphQL.Эта конкретная схема имеет поле search типа Query, и это поле разрешается определенным образом.Если бы вы создавали сервер, вы могли бы написать поле поиска, которое рассматривало запрашиваемые поля как часть критериев поиска.Но это деталь реализации, не связанная с тем, как GraphQL работает в целом.

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