Вступить в клуб →
средняявопросREST API и интеграции

PUT с частичным телом обнулил поля профиля

Пользователь меняет в приложении только телефон, и клиент отправляет:

PUT /api/v1/clients/17
Content-Type: application/json

{"phone": "+79990000000"}

После этого у клиента в базе пропали имя, адрес доставки и согласие на рассылку — в них записались значения по умолчанию. Что здесь верно?

  • Ничего менять в контракте не нужно: PUT по спецификации обновляет только переданные поля, а обнуление данных вызвано ошибкой маппинга в ORM при сохранении модели
  • Проблема в выборе метода: для обновления существующего ресурса вместо PUT берут POST на тот же URL — он не требует полного представления и поля не затирает
  • Достаточно запретить в схеме таблицы значения по умолчанию и разрешить NULL: тогда частичное тело перестанет затирать сохранённые данные
  • PUT заменяет представление ресурса целиком, поэтому непереданные поля и получили значения по умолчанию: для частичного обновления нужен PATCH, а тело PUT проверяют как полное представление

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела