我对JSON补丁(RFC 6902)的解释有疑问。
假设我有一个看起来像这样的资源:
{
"type": "assembly",
"uri": "http://example.com/campSrv/Assembly/18",
"name": "/sample",
"description": "Hello, World Application",
"created": "2013-03-27T16:15Z",
...
}
该资源的定义表明它可以有一个名为“tags”的值,它被定义为一个字符串数组。但是,此资源当前没有标记,因此我的服务不会序列化不存在的数组。
现在假设我提交了以下HTTP PATCH请求:
PATCH http://example.com/campSrv/Assembly/18 HTTP/1.1
Content-Type: application/json-patch
[
{ "op": "add", "path": "/tags/0", "value": "flobbit" }
]
这应该创建'tags'数组并添加'flobbit'作为第一个/唯一的元素,还是我的服务器应该返回错误?
答案 0 :(得分:3)
根据我的理解......
您的补丁会导致错误,因为tags
不存在,并且您无法添加到尚不存在的数组。
...
但是,对象本身或包含它的数组确实需要 存在,但事实并非如此。对于
例如,一个“添加”,目标位置为“/ a / b”,以此开头 文件:{“a”:{“foo”:1}}
不是错误,因为“a”存在,并且“b”将被添加到其中 值。这是一个错误:
{“q”:{“bar”:2}}
因为“a”不存在。
但是,此修补程序会添加tags
字符串,其值为"flobbit"
。
[
{ "op": "add", "path": "/tags", "value": "flobbit" }
]
此修补程序将添加tags
数组,第一个元素为"fobbit"
。
[
{ "op": "add", "path": "/tags", "value": ["flobbit"] }
]