【发布时间】:2014-04-02 18:44:41
【问题描述】:
我正在寻找一个实用指南来实现PATCH 动词,以便使用 JSON 在 RESTful api 中对名词进行部分更新。了解到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's value
email: 'hey@google.com', // 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 to creating nested keys。我认为这是一个规范错误,因为创建嵌套键是明确的。
我可以发送完整的对象差异,例如 this library 生成,但这使得添加或更新密钥的明确案例更加冗长。
如何使用 HTTP PATCH 以精简的方式处理数组、删除和嵌套键?
【问题讨论】:
-
您应该使用JSON Pointers 来引用目标文档结构中的嵌套元素。 JSON Patch 使用有序的操作序列来更新目标 JSON 对象。数组是 JSON Patch 文档中描述的操作的有效值。
-
这是一个非常有用的链接,@countfloortiles,谢谢。我们一直想知道如何表示树数据的路径,很高兴有一个规范可以使用。
标签: json api http rest architecture