PATCH
Запросы описывают набор операций, которые будут применены к ресурсу. Если вы примените один и тот же набор операций дважды к одному и тому же ресурсу, результат может не совпадать. Это потому, что определение операций зависит от вас. Другими словами, вы должны определить правила объединения .
Помните, что PATCH
запрос может использоваться для исправления ресурсов во многих различных форматах, а не только в формате JSON.
Таким образом, PATCH
запрос может быть идемпотентным, если вы определяете правила слияния как идемпотентные .
Идемпотентный пример:
// Original resource
{
name: 'Tito',
age: 32
}
// PATCH request
{
age: 33
}
// New resource
{
name: 'Tito',
age: 33
}
Неидемпотентный пример:
// Original resource
{
name: 'Tito',
age: 32
}
// PATCH request
{
$increment: 'age'
}
// New resource
{
name: 'Tito',
age: 33
}
Во втором примере я использовал синтаксис типа «Монго», который я создал для увеличения атрибута. Понятно, что это не идемпотент, так как отправка одного и того же запроса несколько раз приведет к разным результатам каждый раз.
Теперь вы можете задаться вопросом, допустимо ли использование такого составного синтаксиса. Согласно стандартам это:
Разница между запросами PUT и PATCH отражается в способе, которым сервер обрабатывает вложенный объект для изменения ресурса, идентифицируемого Request-URI. В запросе PUT вложенный объект считается модифицированной версией ресурса, хранящегося на исходном сервере, и клиент запрашивает замену сохраненной версии. Однако с помощью PATCH вложенный объект содержит набор инструкций, описывающих, как ресурс, находящийся в данный момент на исходном сервере, должен быть модифицирован для создания новой версии.
И вы можете также задаться вопросом, насколько удобно использовать PATCH
запросы таким образом, и многие считают, что это не так, вот хороший ответ с большим количеством комментариев по данной проблеме.
{"name": "bendjamin franklin"}