Ответ
Метод PATCH используется для частичного обновления ресурса. В отличие от PUT, который заменяет ресурс целиком, PATCH отправляет только набор изменений, которые необходимо применить к существующему ресурсу.
Ключевые отличия от PUT:
- PUT: Идемпотентный. Клиент отправляет полное представление ресурса. Сервер полностью заменяет ресурс предоставленными данными.
- PATCH: Не обязательно идемпотентный (зависит от формата запроса). Клиент отправляет инструкции ("патч") для модификации ресурса.
Практический пример (ASP.NET Core с JSON Patch):
-
Запрос клиента:
PATCH /api/users/123 HTTP/1.1 Content-Type: application/json-patch+json [ { "op": "replace", "path": "/name", "value": "Alice" }, { "op": "add", "path": "/tags", "value": ["new", "user"] } ] -
Обработка на сервере:
[HttpPatch("{id}")] public IActionResult PatchUser(int id, [FromBody] JsonPatchDocument<User> patchDoc) { var user = _userRepository.GetById(id); if (user == null) return NotFound(); patchDoc.ApplyTo(user); // Применяем изменения к объекту _userRepository.Update(user); // Сохраняем в БД return NoContent(); // 204 No Content }
Форматы PATCH-запросов: Стандарт не диктует конкретный формат. Наиболее распространен JSON Patch (RFC 6902, как в примере выше). Также используется JSON Merge Patch (RFC 7396) или собственные форматы.
Когда использовать PATCH:
- Для обновления больших ресурсов, где передача всего объекта неэффективна.
- Когда нужно отправить только измененные поля.
- Для реализации сложных операций обновления (например, перемещения элемента в списке).