Что делает HTTP-метод PATCH в REST API?

«Что делает HTTP-метод PATCH в REST API?» — вопрос из категории Сети, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод PATCH используется для частичного обновления ресурса. В отличие от PUT, который заменяет ресурс целиком, PATCH отправляет только набор изменений, которые необходимо применить к существующему ресурсу.

Ключевые отличия от PUT:

  • PUT: Идемпотентный. Клиент отправляет полное представление ресурса. Сервер полностью заменяет ресурс предоставленными данными.
  • PATCH: Не обязательно идемпотентный (зависит от формата запроса). Клиент отправляет инструкции ("патч") для модификации ресурса.

Практический пример (ASP.NET Core с JSON Patch):

  1. Запрос клиента:

    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"] }
    ]
  2. Обработка на сервере:

    [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:

  • Для обновления больших ресурсов, где передача всего объекта неэффективна.
  • Когда нужно отправить только измененные поля.
  • Для реализации сложных операций обновления (например, перемещения элемента в списке).