我可以DELETE
一个资源,如:
// Removes group 12 from employee 46
DELETE /employees/46/groups/12
我可以DELETE
整个资源集合,如:
// Removes all groups from employee 46
DELETE /employees/46/groups
我正在寻找适当的RESTful方式来DELETE
一些资源集合。
DELETE /employees/46/groups { ids: [12, 15, 32] }
DELETE /employees/46/groups?ids=12,15,32
DELETE /employees/46/groups/xx
(单身,但称之为3次)查询字符串参数(?ids=12,15,32
)是否只能与GET
一起使用..?
请求正文({ ids: [12, 15, 32] }
)是否始终与POST
,PUT
和DELETE
一起使用..?
这三个都可以使用,但哪一个是DELETE
只有一些资源集合的标准方式..?
答案 0 :(得分:4)
JSON API使用方法编号1(DELETE /employees/46/groups
与正文)。我认为这很可疑,因为RFC 7231 § 4.3.5基本上表示要删除整个目标资源(/employees/46/groups
),而不管身体中发送了什么。但是,others disagree。
我认为DELETE /employees/46/groups?ids=12,15,32
是最好的,因为它会将您要删除的组集视为自己的资源。您可以在超媒体中提供链接。您可以稍后支持GET(但您不必)。
不,绝对没有什么能阻止您使用查询字符串发送非GET请求。查询字符串不是某种“参数”(尽管它通常对此有用),它是资源URI的组成部分。事实上,您可以使用DELETE /api.php?type=employee&id=46&groups=12,15,32
,这仍然是完美的RESTful。 REST的全部意义在于URI(以及其他内容)应该对客户端不透明。
但是,如果要在一个请求中删除非常多的组,查询字符串方法可能会出现问题。如果发生这种情况,最简单的方法是POST /bulk-delete-groups
RPC调用。您也可以考虑PATCH /employees/46/groups
(但请先阅读RFC 5789 errata)。
答案 1 :(得分:0)
大多数API不允许一次删除一组资源,但可以对以下实体执行其他操作:
DELETE /employees?id=12,15,32
或
DELETE /employees?id=12&id=15&id=32
一个很好的选择可能是非REST方式,发送一个包含标记为删除的ID的自定义JSON对象。