Допустим, на моем сервере GraphQl есть запрос, определенный следующим образом.

query getUser(name: String!)

То я делаю такой запрос

query getUser(name: String) {
  getUser(name: $name)
...

Я получаю такую ​​ошибку

Тип переменной «String» не соответствует ожидаемому типу «String!

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

2
Santiago Almeida 24 Мар 2020 в 20:45

1 ответ

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

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

Все это описано в разделе «Проверка» спецификации.

2
Daniel Rearden 24 Мар 2020 в 21:21