我可以DELETE使用单个资源,例如:
// Removes group 12 from employee 46
DELETE /employees/46/groups/12
Run Code Online (Sandbox Code Playgroud)
我可以DELETE像一个完整的资源集合:
// Removes all groups from employee 46
DELETE /employees/46/groups
Run Code Online (Sandbox Code Playgroud)
我正在寻找DELETE 一些资源集合的正确 RESTful 方式。
DELETE /employees/46/groups { ids: [12, 15, 32] }DELETE /employees/46/groups?ids=12,15,32DELETE /employees/46/groups/xx (单个,但调用它 3 次)查询字符串参数 ( ?ids=12,15,32)应该只与GET..一起使用吗?
请求正文 ( { ids: [12, 15, 32] })是否应该始终与POST,PUT和DELETE..一起使用?
所有这三个都可以工作,但是哪一个是DELETE仅某些资源集合的标准方法..?
JSON API使用方法 1(DELETE /employees/46/groups带有主体)。我认为这很可疑,因为RFC 7231 § 4.3.5基本上说整个目标资源 ( /employees/46/groups) 都将被删除,无论正文中发送了什么。然而,其他人不同意。
我认为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-groupsRPC 调用。您也可以考虑PATCH /employees/46/groups(但请先阅读RFC 5789 勘误表)。