Вопрос проверяет понимание различий между полным и частичным обновлением ресурса.
PUT заменяет весь ресурс целиком и является идемпотентным: повторный вызов даст одинаковый результат. PATCH обновляет только конкретные поля ресурса, без перезаписи остальных, и не обязан быть идемпотентным. PUT подходит для полного пересоздания сущности, PATCH — для частичного и более эффективного обновления.
PUT и PATCH оба используются для обновления ресурса, но имеют разную семантику.
Определение: PUT — метод, который полностью заменяет существующий ресурс новым состоянием.
Характеристики:
полный апдейт
идемпотентен
клиент отправляет все поля сущности
Пример:
json
PUT /users/10
{
"name": "John",
"email": "john@example.com",
"age": 30
}
Даже если изменилось только одно поле — требуется отправить весь объект.
Если какое-то поле отсутствует, сервер может интерпретировать это как удаление.
Определение: PATCH — метод частичного обновления ресурса, изменяющий только указанные поля.
Характеристики:
частичный апдейт
не обязательно идемпотентен
передаются только изменённые поля
Пример:
json
PATCH /users/10
{
"email": "new@example.com"
}
Остальные данные пользователя не затрагиваются.
сервис ожидает полную замену ресурса
удобно синхронизировать данные из внешней системы
работа с статичными структурами
важно, чтобы повторный запрос не менял результат
частичное обновление
экономия трафика
сложные ресурсы с большим количеством полей
частые изменения отдельных полей
API, где важно не трогать не указанные данные
PATCH чаще встречается в реальных API из-за своей гибкости.
PUT — это полная замена ресурса, а PATCH — частичное обновление. Различие важно соблюдать, чтобы API оставался логичным, предсказуемым и соответствовал REST-принципам.