← Назад к вопросам

В чем разница между запросами PUT и PATCH?

2.0 Middle🔥 191 комментариев
#API тестирование#Сети и протоколы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между PUT и PATCH запросами

Концептуальная разница

PUT — это операция полной замены (full replacement). Вы отправляете полное представление ресурса, и сервер полностью заменяет существующий ресурс новыми данными. Любые поля, которые вы не отправили, могут быть установлены в null или удалены.

PATCH — это операция частичного обновления (partial update). Вы отправляете только те поля, которые нужно изменить, остальные остаются неизменными.

HTTP спецификация

PUT (RFC 7231)

  • Idempotent операция (повторное выполнение дает тот же результат)
  • Требует полное тело сущности
  • Может создать новый ресурс если он не существует (в зависимости от реализации)

PATCH (RFC 5789)

  • Может быть idempotent или non-idempotent (зависит от реализации)
  • Может содержать только измененные поля
  • Часто использует специальный формат (JSON Patch, JSON Merge Patch)

Практические примеры

PUT запрос:

PUT /api/v1/users/123
Content-Type: application/json

{
  "name": "John Doe",
  "email": "john@example.com",
  "age": 30,
  "role": "user"
}

Этот запрос полностью заменит пользователя. Если раньше были другие поля, они будут потеряны.

PATCH запрос:

PATCH /api/v1/users/123
Content-Type: application/json

{
  "email": "newemail@example.com",
  "age": 31
}

Этот запрос только обновит email и age, остальные поля останутся без изменений.

JSON Merge Patch (для PATCH)

PATCH /api/v1/users/123
Content-Type: application/merge-patch+json

{
  "address": {
    "city": "Moscow"
  }
}

JSON Patch (более строгий формат)

PATCH /api/v1/users/123
Content-Type: application/json-patch+json

[
  { "op": "replace", "path": "/email", "value": "new@example.com" },
  { "op": "add", "path": "/phone", "value": "+79991234567" },
  { "op": "remove", "path": "/middleName" }
]

Когда использовать

PUT используйте для:

  • Полного обновления сущности
  • Когда клиент отправляет полный объект
  • Когда нужна идемпотентность

PATCH используйте для:

  • Частичного обновления
  • Когда клиент отправляет только измененные поля
  • Для экономии трафика (особенно важно в мобильных приложениях)

Тестирование в QA

При тестировании API убедитесь:

# Тест PUT
def test_put_replaces_full_resource():
    response = requests.put(
        "https://api.example.com/users/123",
        json={"name": "Jane", "email": "jane@test.com"}
    )
    assert response.status_code == 200
    data = response.json()
    assert data["name"] == "Jane"
    # Проверяем, что старые поля удалены или обнулены

# Тест PATCH
def test_patch_updates_partially():
    response = requests.patch(
        "https://api.example.com/users/123",
        json={"email": "newemail@test.com"}
    )
    assert response.status_code == 200
    data = response.json()
    assert data["email"] == "newemail@test.com"
    # Другие поля должны остаться прежними

Резюме

ПараметрPUTPATCH
НазначениеПолная заменаЧастичное обновление
IdempotentДаМожет варьироваться
Требуемые данныеПолный объектТолько изменения
Неотправленные поляМогут быть удаленыОстаются без изменений
ИспользованиеПереиспользование ресурсаЭкономия трафика

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

В чем разница между запросами PUT и PATCH? | PrepBro