Вот что говорится в RFC 5789:
Метод PATCH запрашивает, чтобы набор изменений, описанных в объекте запроса, был применен к ресурсу, указанному Request-URI. Набор изменений представлен в формате, называемом документом исправления, идентифицируемым по типу носителя. Если Request-URI не указывает на существующий ресурс, сервер МОЖЕТ создать новый ресурс в зависимости от типа документа исправления (может ли он логически изменить пустой ресурс) и разрешений и т. д.
Разница между запросами PUT и PATCH отражается в том, как сервер обрабатывает вложенный объект для изменения ресурса, идентифицированного Request-URI. В запросе PUT вложенный объект считается измененной версией ресурса, хранящегося на исходном сервере, и клиент запрашивает замену сохраненной версии. Однако с PATCH вложенный объект содержит набор инструкций, описывающих, как ресурс, находящийся в настоящее время на исходном сервере, должен быть изменен для создания новой версии.
Допустим, у меня есть { "login": "x", "enabled": true }
, и я хочу его отключить.
Согласно сообщению Пожалуйста. Не исправляйте как идиот. правильный запрос PATCH будет
[{ "op": "replace", "path": "/enabled", "value": false }]
Однако возьмем этот запрос:
{ "enabled": false }
Он также «содержит набор инструкций, описывающих, как следует модифицировать ресурс, находящийся в настоящее время на исходном сервере», с той лишь разницей, что вместо объекта JSON используется свойство JSON.
Это кажется менее мощным, но при необходимости изменения массива могут иметь другой специальный синтаксис (например, {"a":{"add":[], "remove":[]}}
), и логика сервера в любом случае может не справиться с чем-то более мощным.
Является ли это неправильным запросом PATCH в соответствии с RFC? И если да, то почему?
И, с другой стороны, будет ли { "op": "disable" }
правильным запросом PATCH?