Чем отличаются PUT и PATCH в REST Семантика REST: PUT — полная замена ресурса и его текущего состояния
Чем PUT отличается от PATCH в REST по семантике и реализации на практике?
Чем отличаются PUT и PATCH в REST Семантика REST: PUT — полная замена ресурса и его текущего состояния
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Чем отличаются PUT и PATCH в REST
- Семантика REST:
- PUT — полная замена ресурса и его текущего состояния
PATCH — частичное обновление с изменением отдельных полей
Содержимое запроса:
- PUT должен содержать объект целиком
PATCH передаёт только поля, которые были изменены
Идемпотентность:
- PUT является идемпотентным: повторение запроса приводит к тому же результату
PATCH не во всех случаях идемпотентен — это определяется содержанием патча
Техническая реализация:
- PUT нередко полностью обновляет запись в БД
PATCH применяет изменения выборочно, что позволяет сократить объём трафика
Когда применять:
- PUT подходит, если клиент располагает полным представлением ресурса
PATCH используют, когда требуется изменить несколько значений без отправки всего объекта
Валидация и обработка ошибок:
- PUT проверяет структуру ресурса полностью
PATCH валидирует только те поля, которые меняются
Пример:
- PUT /user/1 с полным JSON
- PATCH /user/1 с { "email": "new@example.com" }
Итак, метод выбирают исходя из задачи: PUT полностью перезаписывает ресурс, а PATCH частично обновляет его, уменьшая трафик и обеспечивая более гибкое внесение изменений.
Развёрнутый ответ
Основной ответ
В REST методы PUT и PATCH применяются для обновления ресурсов, однако смысл выполняемой операции у них различается. PUT используется для полной замены ресурса: сервер ожидает от клиента объект целиком, после чего заменяет существующее состояние переданными данными. PATCH, напротив, предназначен для частичных изменений. В таком запросе клиент передаёт лишь обновляемые поля или операции, а сервер применяет их к уже существующему объекту.
Основные различия
- PUT — идемпотентный метод, выполняющий замену всего ресурса. Если несколько раз отправить одинаковый PUT, итоговое состояние останется тем же. Такой вариант удобен, когда клиент располагает полной моделью объекта и должен обновить её целиком.
- PATCH не обязательно идемпотентен: поведение определяется реализацией и видом используемых операций, например JSON Patch или Merge Patch. Метод передаёт только данные либо инструкции для изменения, поэтому помогает уменьшить сетевой трафик и упростить точечные обновления.
- На практике PUT требует передать в теле запроса сущность полностью, тогда как PATCH содержит только изменения. Чтобы сменить email пользователя, при использовании PUT придётся отправить все его поля, а при PATCH достаточно передать поле email.
Практическое применение
В современных API, где часто меняются отдельные данные и предусмотрена высокая степень кастомизации, обычно выбирают PATCH для частичных обновлений. Это делает запросы эффективнее и повышает безопасность с точки зрения конкорентности. PUT уместен при создании или полном замещении сущности — например, при целиком обновляемой конфигурации сервиса. Многие REST API явно разделяют назначение этих методов, поэтому корректная реализация отражается на кэшировании, поведении клиента и серверной валидации.