Опущен необязательный ввод, установленный на null вместо неопределенного

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

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

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

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

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

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

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

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

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

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

dacz опубликовал интересный ответ, который довольно хорошо резюмирует:

Nullable input when not presented within the query variables in apollo client, is getting called with null value. Client should not pass the whole input as null, it should omit it completely or pass it with undefined. Passing null may mean explicitly null the input. Same applied to input fields, so the server may react on explicitly resetting the value (presented in the input with null or do not handle it if omitted).

Обе темы до сих пор остаются нерешенными.

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

Если это проблема, это не проблема с apollo-server — вы можете легко проверить это, используя Playground с последней версией. Пропущенные поля ввода не будут определены внутри вашего распознавателя. Так работает GraphQL.js, сколько я себя помню.

Daniel Rearden 25.03.2019 03:10

Я только что проверил это поведение, используя [email protected], [email protected] и [email protected], и я не могу воспроизвести проблему. И аргументы, и поля входных объектов отображаются как неопределенные, если они опущены. Результаты согласуются независимо от того, использую ли я буквальные значения или переменные. Даже если я явно устанавливаю для переменной значение undefined, она все равно остается неопределенной на стороне сервера. Единственный способ увидеть нулевое значение на стороне сервера — это явно установить значение null.

Daniel Rearden 25.03.2019 04:11

Возможно, это была ошибка либо в apollo-client, либо в react-apollo, которая была недавно исправлена. Однако, если вы обновили свои библиотеки и все еще видите такое поведение, есть какой-то другой фактор, ответственный за это (вероятно, на стороне клиента). Сужение того, что это такое, потребует увидеть реальный код.

Daniel Rearden 25.03.2019 04:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
2 309
0

Другие вопросы по теме