Я ищу практическое руководство по реализации глагола PATCH
для частичного обновления существительного в RESTful api с использованием JSON. Понимая, что PATCH
предназначен для частичных обновлений, нам не хватает стандартизации вокруг синтаксиса для удаления ключей, создания или обновления вложенных ключей и массивов.
Скажем, я GET
объект:
// GET users/42
{
id: 42,
name: 'SimpleAsCouldBe',
city: 'San Francisco',
roles: ['viewer','editor'],
posts: {
'01': {},
'02': {},
}
}
... Затем я хочу его обновить:
// PATCH users/42
{
name: 'SimpleGuy', // CLEAR: update the key value
email: '[email protected]', // CLEAR: add the new key
city: null // UNCLEAR: delete the key?
roles: ['owner'], // UNCLEAR: replace the whole array?
posts: {
'02': { title:'how to pop lock' }, // CLEAR: update nested key
'03': { title:'how to salsa' } // CLEAR: create new nested key
}
notes: {
'01': { title: 'a note title' } // CLEAR (but disallowed?): create wrapping key
}
}
PATCH rfc говорит no для создания вложенных ключей. Я думаю, что это ошибка спецификации, потому что создание вложенного ключа не является двусмысленным.
Я мог бы отправить полный diff объекта, например эта библиотека, но это делает ясным случай добавления или обновления ключа более подробным.
Как обрабатывать массивы, удаления и вложенные ключи в худшем виде с помощью HTTP PATCH?