以 REST 方式更新整个资源集合
Update an entire resource collection in a REST way
我有一个资源列表的 REST URI,类似于:
http://foo.com/group/users
这些用户中的每一个都有一个序列号,我想公开一种方法来为集合中的所有用户重新编号这些值,并使访问该列表的每个人都可以使用此更改。由于这是对整个集合的操作,我不确定如何完成此操作。
我可以设想一个 URL 像 http://foo.com/group/users?sequence=normalize
但是 PUT
和 POST
对整个列表都没有意义,除非我提交整个集合新号码作为消息数据。
我怎样才能像这样以 RESTful 的方式更新整个集合,而不必重新发送集合中的所有更新资源?
酒椰对我最初的回复发表评论后,我修改了我的答案,使其更 RESTful...
- 使用方法
PATCH
此方法通常用于更新部分资源的状态。在列表资源的情况下,我们可以发送一个列表,其中仅包含要更新的元素和列表中元素的标识符。以下请求将是:
PATCH /group/users
[
{ "id": "userId1", "sequence": "newSequenceNumber1" },
{ "id": "userId2", "sequence": "newSequenceNumber2" },
(...)
]
- 在列表资源
上使用方法POST
此方法通常用于在资源管理的列表中添加元素。因此,如果您想将其用于此操作,我们需要在请求中传递有关要执行的操作的提示。我们可以选择将其添加到专用 header 或有效负载中。
使用header方法,你会得到类似的结果:
POST /group/users
X-Action: renumbering
[
{ "id": "userId1", "sequence": "newSequenceNumber1" },
{ "id": "userId2", "sequence": "newSequenceNumber2" },
(...)
]
使用有效载荷方法,您将得到类似的东西:
POST /group/users
{
"action": "renumbering",
"list": {
[
{ "id": "userId1", "sequence": "newSequenceNumber1" },
{ "id": "userId2", "sequence": "newSequenceNumber2" },
(...)
]
}
}
希望对你有帮助,
蒂埃里
您可以在 URI 上同时使用 PATCH 和 POST。如果我是你,我会使用 PATCH。这是批量更新的最佳解决方案。
从语义上讲,HTTP PATCH method is the right way to go. This is also described in the .
PATCH /group/users
[
{ "id": "userId1", "sequence": "newSequenceNumber1" },
{ "id": "userId2", "sequence": "newSequenceNumber2" },
...
]
但是,所选答案中描述的第二种方法不是 restful,因为您在 POST 请求中发明了新动词。这是 SOAP,不是 REST。
我有一个资源列表的 REST URI,类似于:
http://foo.com/group/users
这些用户中的每一个都有一个序列号,我想公开一种方法来为集合中的所有用户重新编号这些值,并使访问该列表的每个人都可以使用此更改。由于这是对整个集合的操作,我不确定如何完成此操作。
我可以设想一个 URL 像 http://foo.com/group/users?sequence=normalize
但是 PUT
和 POST
对整个列表都没有意义,除非我提交整个集合新号码作为消息数据。
我怎样才能像这样以 RESTful 的方式更新整个集合,而不必重新发送集合中的所有更新资源?
酒椰对我最初的回复发表评论后,我修改了我的答案,使其更 RESTful...
- 使用方法
PATCH
此方法通常用于更新部分资源的状态。在列表资源的情况下,我们可以发送一个列表,其中仅包含要更新的元素和列表中元素的标识符。以下请求将是:
PATCH /group/users
[
{ "id": "userId1", "sequence": "newSequenceNumber1" },
{ "id": "userId2", "sequence": "newSequenceNumber2" },
(...)
]
- 在列表资源 上使用方法
POST
此方法通常用于在资源管理的列表中添加元素。因此,如果您想将其用于此操作,我们需要在请求中传递有关要执行的操作的提示。我们可以选择将其添加到专用 header 或有效负载中。
使用header方法,你会得到类似的结果:
POST /group/users
X-Action: renumbering
[
{ "id": "userId1", "sequence": "newSequenceNumber1" },
{ "id": "userId2", "sequence": "newSequenceNumber2" },
(...)
]
使用有效载荷方法,您将得到类似的东西:
POST /group/users
{
"action": "renumbering",
"list": {
[
{ "id": "userId1", "sequence": "newSequenceNumber1" },
{ "id": "userId2", "sequence": "newSequenceNumber2" },
(...)
]
}
}
希望对你有帮助, 蒂埃里
您可以在 URI 上同时使用 PATCH 和 POST。如果我是你,我会使用 PATCH。这是批量更新的最佳解决方案。
从语义上讲,HTTP PATCH method is the right way to go. This is also described in the
PATCH /group/users
[
{ "id": "userId1", "sequence": "newSequenceNumber1" },
{ "id": "userId2", "sequence": "newSequenceNumber2" },
...
]
但是,所选答案中描述的第二种方法不是 restful,因为您在 POST 请求中发明了新动词。这是 SOAP,不是 REST。