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