В чём ключевая разница между HTTP-методами PUT и PATCH?

«В чём ключевая разница между HTTP-методами PUT и PATCH?» — вопрос из категории HTTP и веб-протоколы, который задают на 31% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основное различие — в семантике обновления ресурса.

  • PUTполная замена ресурса. Клиент должен отправить полное представление ресурса. Поля, не указанные в запросе, будут сброшены в значения по умолчанию (часто null).
  • PATCHчастичное обновление. Клиент отправляет только те поля, которые необходимо изменить. Остальные поля ресурса остаются нетронутыми.

Пример: Исходный ресурс GET /users/1{"id": 1, "name": "Alex", "age": 30, "city": "Moscow"}

  • Запрос PUT:

    PUT /users/1
    Content-Type: application/json
    
    {"name": "Alexander", "age": 31}

    Результат: {"id": 1, "name": "Alexander", "age": 31, "city": null}. Поле city было утеряно.

  • Запрос PATCH:

    PATCH /users/1
    Content-Type: application/json
    
    {"age": 31}

    Результат: {"id": 1, "name": "Alex", "age": 31, "city": "Moscow"}. Изменился только возраст.

Важное свойство: PUT является идемпотентным (многократный одинаковый вызов даёт тот же результат), а PATCH — не всегда.