Что такое восклицательный знак в graphql? - PullRequest
0 голосов
/ 04 июня 2018

В файле схемы, который я заметил, после некоторых типов есть восклицательные знаки, например

# Information on an account relationship
type AccountEdge {
  cursor: String!
  node: Account!
}

Что это значит?Я не могу найти что-либо об этом в документации или через поиск в Google ?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Из spec :

По умолчанию все типы в GraphQL обнуляются;нулевое значение является действительным ответом для всех вышеперечисленных типов.Чтобы объявить тип, который запрещает нуль, можно использовать ненулевой тип GraphQL.Этот тип переносит базовый тип, и этот тип действует идентично этому упакованному типу, за исключением того, что null не является допустимым ответом для типа переноса.Завершающий восклицательный знак используется для обозначения поля, в котором используется ненулевой тип, например: name: String!.

Другими словами, типы в GraphQL по умолчанию обнуляются.Восклицательный знак после типа специально определяет этот тип как ненулевой.

Это имеет различные последствия в зависимости от того, где используется тип.

Вывод

Когда не нольприменяется к типу поля , это означает, что если сервер разрешит это поле в null, ответ не пройдет проверку.Вы все еще можете получить частичный ответ, если ошибка не распространяется полностью до корня .

Например, для такой схемы, как:

type Query {
  user: User
}

type User {
  id: ID!
}

Здесь поле id не является нулевым.Помечая поле как ненулевое, мы фактически гарантируем , что мы никогда не вернем ноль для этого поля.Если сервер возвращает ноль, это означает, что что-то пошло не так, и мы хотим выдать ошибку проверки.

Ввод

Когда ненулевое значение применяется к типу input , подобно аргументу, полю входного объекта или переменной, делает этот ввод обязательным.Например:

type Query {
  getUser(id: ID!, status: Status): User
}

Здесь аргумент id не равен нулю.Если мы запрашиваем поле getUser, нам всегда нужно будет предоставить аргумент id для него.С другой стороны, поскольку аргумент status может иметь значение NULL, он необязательный и может быть опущен.Это относится и к переменным:

query MyQuery ($foo: ID!) {
  getUser(id: $foo)
}

Поскольку переменная $foo не равна нулю, при отправке запроса она не может быть опущена и ее значение не может быть равно null.

Специальное примечание о типах переменных

Поскольку поле id является ненулевым ID (т.е. ID!) типом в нашем примере, любая переменная, которую мы передаем, должна также быть ненулевым ID.Если бы наша переменная $foo была обнуляемой ID, мы не смогли бы передать ее аргументу id.Однако обратное неверно.Если аргумент обнуляем, вы можете передать ему ненулевую переменную.

Другими словами:

+----------+----------+--------+
| Argument | Variable | Valid? |
+----------+----------+--------+
| String   | String   |   ✅   |
| String   | String!  |   ✅   |
| String!  | String   |   ❌   |
| String!  | String!  |   ✅   |
+----------+----------+--------+
0 голосов
/ 04 июня 2018

Это означает, что поле не имеет значения NULL.

См. Дополнительную информацию в Graphql - Схемы и типы

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