在RESTful API中更新多个记录

时间:2014-09-08 15:12:28

标签: rest

我想知道是否有RESTful方法来处理使用一个请求更新多个记录,其中您不知道要更新的记录的ID。

示例:

您有资源/jobs。假设您能够以下列方式列出这些作业GET /jobs?sort=priority&inprogress=false&limit=10这将返回一个按优先级顺序排列的10个作业的列表。

现在说你想把这些工作的状态改为inprogress = true。实现这一目标的RESTful方法是什么?显然你可以执行一个GET,然后单独更新每个,但是你可能有另一个进程已经抓住了你进行GET和进行更新之间的进程。然后你会得到一个失败的请求,因为那些已经更新,这是我想要避免的主要内容。

基于像GET请求那样的过滤执行更新是否可以RESTful,例如

PATCH /jobs?sort=priority&inprogress=false&limit=10

{[op:"replace", path:"/inprogress", value:true]}

这样就可以更新优先级顺序不正在进行的前10个作业,将它们更改为正在进行并返回它们。

这是RESTful吗?或者有更好的方法以RESTful方式实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

<强>更新

阅读完评论后,我意识到更新资源的命令确实是PATCH,所以这个答案不适用。对不起,感到困惑。


在Rest定义中,GET(以及PUT)操作必须是幂等的:它意味着(参见here

  

&#34; N的副作用> 0个相同的请求与单个请求相同:

(因此,当使用幂等操作时,您的客户端应用程序可以放心地重复任何调用,它不会产生意外结果)

你假装使用GET的方式显然没有遵循这个限制,你必须使用POST才能得到这个&#34;停止&#34;流程。

此外,我会使用一些不同的资源来明确区分此操作:类似

POST /activate-jobs?sort=priority&limit=10