3

我对 JSON Patch ( 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" }
]

这应该创建“标签”数组并将“flobbit”添加为第一个/唯一元素,还是我的服务器应该返回错误?

4

1 回答 1

3

在我的理解...

您的补丁将导致错误,因为tags不存在,并且您无法添加到尚不存在的数组中。

RFC 6902 4.1

...

但是,对象本身或包含它的数组确实需要
存在,如果不是这种情况,它仍然是一个错误。例如
,以该文档开头的目标位置为“/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"] }
]
于 2013-04-10T16:05:09.617 回答