Опущен необязательный ввод, установленный в null вместо undefined - PullRequest
0 голосов
/ 25 марта 2019

Примерно год назад было сделано обновление для apollo-server (или react-apollo?), Которое полностью прервало старое использование пропущенных пропускаемых значений в запросах GraphQL.

До обновления,Вы можете определить что-то вроде:

Mutation {
  editProfile(id: ID!, name: String, avatar: String)
}

И при вызове его на стороне клиента с пропущенными входными данными, скажите:

editProfile(id: "whateverid", name: "James")

вы получили avatar как undefined в вашем преобразователе. Теперь он установлен на null.

Проблема в том, что null является совершенно допустимым значением для некоторых необязательных входов, например avatar.Таким образом, в основном, мы потеряли информацию в процессе и больше не можем определить разницу на стороне сервера между:

  • Необязательный ввод, который был пропущен и отображается null (= do не обновление базы данных) и
  • необязательный ввод, который был явно установлен на null (= обновление базы данных)

Я открыл поток на Githubоб этом здесь: https://github.com/apollographql/apollo-server/issues/2056

Еще один парень сделал то же самое год назад на react-apollo Github: https://github.com/apollographql/react-apollo/issues/1569

dacz отправил интересный ответ , чтосуммирует это довольно хорошо:

Обнуляемый ввод, когда он не представлен в переменных запроса в клиенте apollo, вызывается с нулевым значением.Клиент не должен передавать весь ввод как нулевой, он должен полностью его пропустить или передать с неопределенным значением.Передача нулевого значения может означать, что входное значение явно равно нулю.То же относится и к полям ввода, поэтому сервер может реагировать на явное восстановление значения (представлено во входных данных со значением NULL или не обрабатывать его, если оно опущено).

Оба потока все еще остаются неразрешенными.

Есть ли у кого-нибудь чистое решение для этого?

...