RESTful API - 删除一些资源集合?

时间:2016-05-10 12:34:11

标签: rest http

我可以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 一些资源集合

  1. DELETE /employees/46/groups { ids: [12, 15, 32] }
  2. DELETE /employees/46/groups?ids=12,15,32
  3. DELETE /employees/46/groups/xx(单身,但称之为3次)
  4. 查询字符串参数(?ids=12,15,32)是否只能与GET一起使用..?

    请求正文({ ids: [12, 15, 32] })是否始终与POSTPUTDELETE一起使用..?

    这三个都可以使用,但哪一个是DELETE只有一些资源集合的标准方式..?

2 个答案:

答案 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对象。