когда мне следует использовать PATCH вместо PUT?
Использовать патч, когда документ патча намного меньше, чем полное представление, и вам не нужны преимущества идемпотентного обмена сообщениями .
И PATCH, и PUT имеют семантику удаленной авторизации, то есть запросы означают: «Пожалуйста, сделайте так, чтобы ваша копия целевого ресурса соответствовала моей копии». В случае PUT мы отправляем полную копию нового представления; в случае PATCH мы отправляем документ исправления, то есть представление изменений, которые мы внесли.
PUT равен идемпотент ; Компоненты общего назначения знают, что никакого повреждения не произойдет, если сервер получит две копии сообщения. Это означает, что, помимо прочего, если мы отправляем сообщения на ненадежном транспорте, клиент может отреагировать на потерянный ответ, повторно отправив запрос без необходимости каких-либо дополнительных разрешений .
PATCH равен не идемпотент; гарантии, которые он дает, очень похожи на гарантии POST. Поэтому компонент общего назначения НЕ будет знать, что можно повторить запрос в случае потери ответа.
(Существуют некоторые форматы документов исправлений, которые поддерживают идемпотентную обработку - JSON Patch является одним из примеров. Но это не , как правило, правда, и эти знания не доступны в «легко стандартизируемой форме», которую могут обнаружить клиенты общего назначения.)