我有两个资源:Group
和Item
。每个Item
属于特定的Group
并且有status
领域。我希望能够在单个API调用中将Item
中每个Group
的状态更新为inactive
。这是我想要的唯一状态改变 - 我不想将其改为active
或类似的东西。
什么是RESTful方式这样做?我知道网址中的动词是皱眉,所以/api/groups/<group_id>/deactivate-items
不会好。具有PATCH /api/groups/<group_id>/items
有效载荷的status='inactive'
是否适合REST?
什么是RESTful方式这样做?
想想你将如何使用网站。
您可能会获取一些描述该组的页面;在该页面的某个地方会有一些语义提示“要使该组的所有成员都处于非活动状态,请提交此表单。如果表单已提交,那么您的后端将负责执行实际工作,并且您将返回描述刚刚发生的事情的页面,以及其他有趣事情的链接。
因为浏览器理解HTTP和HTML,所以这一切都可以使用服务器碰巧提供的任何标识符来完成。服务器可以自由地改变表单的动作,因为浏览器只是执行HTML标准中描述的表单处理,并使用表单元数据描述的target-uri。
由于标识符可以是任何东西,因此您可以利用一个有趣的属性 - 成功时不安全的请求方法(包括PUT,POST,DELETE)invalidate本地缓存的资源。因此,一个有趣的可能性是将表单数据提交回/api/groups/<group_id>
并使该页面的任何早期副本无效。
PATCH / api / groups //有效负载状态='无效'的项在REST中是否合适?
也许 - 这取决于/api/groups/<group_id>/items
是什么。
要记住REST的一个关键点是您的资源模型不是您的域模型不是您的数据模型。资源支持我们要向客户端公开的协议。
从长远来看,请参阅Jim Webber's 2011 talk。