我想知道是否有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方式实现这一目标吗?
答案 0 :(得分:1)
<强>更新强>:
阅读完评论后,我意识到更新资源的命令确实是PATCH,所以这个答案不适用。对不起,感到困惑。
在Rest定义中,GET(以及PUT)操作必须是幂等的:它意味着(参见here)
&#34; N的副作用> 0个相同的请求与单个请求相同:
(因此,当使用幂等操作时,您的客户端应用程序可以放心地重复任何调用,它不会产生意外结果)
你假装使用GET的方式显然没有遵循这个限制,你必须使用POST才能得到这个&#34;停止&#34;流程。
此外,我会使用一些不同的资源来明确区分此操作:类似
POST /activate-jobs?sort=priority&limit=10