Объясните различия между методами HTTP PUT и PATCH при обновлении ресурсов.
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
PUT обычно используют для полной замены ресурса по известному URI, а PATCH — для частичного изменения только нужных полей. Важно понимать, что PUT должен быть идемпотентным, то есть повторный одинаковый запрос не должен менять результат. PATCH чаще применяют, когда нужно обновить один или несколько атрибутов без отправки всего объекта.
Определение:
PUT — метод для создания или полной замены ресурса по конкретному адресу. Если ресурс уже существует, его состояние обычно заменяется на то, что пришло в запросе.
PATCH — метод для частичного обновления ресурса. В запросе передают только изменения, а не весь объект целиком.
Практически это означает: если нужно обновить весь профиль пользователя, подходит PUT; если нужно поменять только email или статус, удобнее PATCH.
Пример использования:
// PUT: полная замена ресурса
PUT /api/users/42
{
"id": 42,
"name": "Ivan Petrov",
"email": "ivan.petrov@example.com",
"isActive": true
}
// PATCH: частичное обновление ресурса
PATCH /api/users/42
{
"email": "new.email@example.com"
}
В ASP.NET Core это обычно выглядит так:
[HttpPut("{id}")]
public IActionResult PutUser(int id, UserDto dto)
{
// найти пользователя
// заменить все поля
return NoContent();
}
[HttpPatch("{id}")]
public IActionResult PatchUser(int id, JsonPatchDocument<UserDto> patchDoc)
{
// загрузить текущую модель
// применить только изменения
return NoContent();
}
Пояснение кода:
В примере PUT принимает полный DTO пользователя. Это значит, что клиент должен отправить все данные, которые должны сохраниться после обновления. Сервер обычно читает текущую запись и перезаписывает ее новыми значениями.
В примере PATCH передается только часть данных или набор операций изменения. Сервер загружает текущий объект, применяет только указанные изменения и сохраняет результат. Здесь код не требуется для понимания идеи, но логика работы такая: взять существующий ресурс, изменить только нужные поля, не затрагивая остальные.
Ключевые моменты:
- PUT — полная замена ресурса.
- PATCH — частичное обновление ресурса.
- PUT обычно идемпотентен: повторный одинаковый запрос не должен менять результат.
- PATCH не обязан быть идемпотентным, хотя может быть таким в зависимости от реализации.
- При PUT клиент часто отправляет весь объект; при PATCH — только изменяемые поля.
- Для API на ASP.NET Core PUT удобен для “replace”, а PATCH — для точечных изменений.