Ответ
Основное различие — в семантике обновления ресурса.
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 — не всегда.