Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services REST数组操作最佳实践_Web Services_Api_Http_Rest - Fatal编程技术网

Web services REST数组操作最佳实践

Web services REST数组操作最佳实践,web-services,api,http,rest,Web Services,Api,Http,Rest,我可以通过REST完全访问foo资源: { "name": "foo", "tags": [ "tag01", "tag02", "tag03" ] } 我想删除tags数组中的tag01 通常我会获取\foo并将\foo放回,而不使用tag01。 在这种情况下,这个对象很小,所以这是正常的 但是让我们假设它要大得多。对于这种情况,我不喜欢下载和上传这些数据。经过谷歌的一些调查,我发现了。我看起来正是我需要的 我以补丁方式提出的请求现在是 PATCH /fo

我可以通过REST完全访问foo资源:

{
  "name": "foo",
  "tags": [
    "tag01",
    "tag02",
    "tag03"
  ]
}
我想删除
tags
数组中的
tag01

通常我会
获取\foo
将\foo
放回,而不使用
tag01
。 在这种情况下,这个对象很小,所以这是正常的

但是让我们假设它要大得多。对于这种情况,我不喜欢下载和上传这些数据。经过谷歌的一些调查,我发现了。我看起来正是我需要的

我以补丁方式提出的请求现在是

PATCH /foo/tags?op={add|delete}
要删除,我将使用:

PATCH /foo/tags?op=delete
根据这些数据:

{
  "value": "tag01"
}
现在有两个人认为我不喜欢:

  • 查询字段
    op
    -rfc或smth中是否描述了一些deafult名称。像这样
  • 请求数据中的成员
    -这也是自由选择的名称
我觉得不太对劲

是否有其他方法通过REST操作数组

是否有一些名称约定以补丁的方式执行

是否有其他方法通过REST操作数组

是的,因为它不正确。通过REST,您可以将URL映射到资源(而不是操作),并使用HTTP方法和发送表示来操作资源。在URL或表示中使用
op:remove
是错误的

是否有一些名称约定以补丁的方式执行

不,没有REST命名约定。URI结构对于REST客户端来说并不重要,因为它们遵循带有语义注释的超链接

如果您需要一个
op:remove
或类似的东西,那么它表明您的URI-资源映射不好。可能您必须定义新的资源或重新考虑资源结构

我会将您想要的描述为批量创建和批量删除。您可以使用以下内容对此案例进行建模:

  • POST/collection[{},{},…]>201
  • DELETE/collection?filter=“…”->204
为了从集合中删除某些内容,您需要一个资源标识符URI。在这种情况下,它可以包含数组中的标记名或索引(如果已排序)

  • /foo/tags/tag01
  • /foo/tags/0
这取决于你,但我会使用标签名

在这之后,事情就很简单了:

  • POST/foo/tags[“a”、“b”、“c”]
  • DELETE/foor/tags?name=“a,b,c”

因此,修补程序不是您正在寻找的方法,因为您正在创建和删除资源,而不是替换它们。

修补程序的有效负载应包含以下内容。所有信息都应该在有效负载中传递,而不是在查询参数中传递

例如,您可以发送:

PATCH /foo

[
  { 
    "op": "remove",
    "path": "/tags/0" 
  }
]
路径
/tags/0
指向数组的第一个元素。其余元素应向左移动

有关更多详细信息,请参阅。

常见答案是正确的(我接受此答案的原因)。但在本例中,路径中的json指针不正确(ref:)。