ПУТ против ПАТЧА

Оба метода изменяют существующий ресурс, и они различаются по содержанию тела запроса. Тело запроса PUT — это полное новое состояние: поля, которые вы пропускаете, в принципе, удаляются или сбрасываются. Тело запроса PATCH — это описание изменений в формате, который документирует сервер — частичный объект или список операций, как в JSON Patch.

Как это работает

PUT по определению является идемпотентным: отправка одного и того же полного представления дважды приводит к одному и тому же результату. PATCH не гарантирует идемпотентность, поскольку операция типа "append to this list" или "increment" , примененная дважды, дает результат, отличный от однократного применения. Именно поэтому запросы PATCH особенно выигрывают от использования оператора If-Match, так как повторная попытка применения PATCH может быть отклонена, а не продублирована.

Заблуждение

Этот PATCH — это просто "PUT without the fields you did not change" . Многие API реализуют это именно так, но в самом методе об этом ничего не сказано — PATCH в стиле слияния и документ JSON Patch — это оба PATCH с совершенно разной семантикой. И многие конечные точки "PUT" на практике выполняют слияние, а не замену, поэтому проверьте, что именно делает ваш PATCH с отсутствующим полем.

Попробуйте здесь.

API Pizza принимает частичное обновление по PATCH /pizza/v1/orders/{id} , а Protocol Lab принимает JSON-патч RFC 6902 по PATCH /protocol/v1/documents/{id} ; конечные точки PUT для символов заменяют и проверяют соответствие.

Источники

Другие термины

Читать страницу на английском

Все термины · Приёмы тестирования · Все 39 mock REST API

Последнее обновление