RESTful API-是否删除某些资源集合?
我可以RESTful API-是否删除某些资源集合?,rest,http,Rest,Http,我可以删除单个资源,如: // Removes group 12 from employee 46 DELETE /employees/46/groups/12 我可以删除整个资源集合,如: // Removes all groups from employee 46 DELETE /employees/46/groups 我正在寻找适当的RESTful方法来删除部分资源集合 DELETE/employees/46/groups{id:[12,15,32]} DELETE/employees
删除单个资源,如:
// Removes group 12 from employee 46
DELETE /employees/46/groups/12
我可以删除整个资源集合,如:
// Removes all groups from employee 46
DELETE /employees/46/groups
我正在寻找适当的RESTful方法来删除部分资源集合
DELETE/employees/46/groups{id:[12,15,32]}
DELETE/employees/46/groups?id=12,15,32
DELETE/employees/46/groups/xx
(单打,但打3次)
查询字符串参数(?ids=12,15,32
)是否应仅与GET
一起使用
请求正文({id:[12,15,32]}
)是否应始终与POST
、PUT
和DELETE
一起使用
这三种方法都可以,但哪一种是仅删除部分资源集合的标准方法?大多数API不允许一次删除资源集合,但可以对实体执行其他操作,如:
DELETE /employees?id=12,15,32
或
一个很好的选择可能是非REST方式,即发送一个包含标记为删除的ID的自定义JSON对象。使用方法1(DELETE/employees/46/groups
和一个body)。我认为这是可疑的,因为基本上说,整个目标资源(/employees/46/groups
)都将被删除,而不管身体中发送了什么。然而
我认为DELETE/employees/46/groups?ids=12,15,32
是最好的,因为它将要删除的组集视为自己的资源。您可以在超媒体中提供指向的链接。您可以稍后使用它(但您不必这样做)
不,绝对没有什么可以阻止您使用查询字符串发送非GET请求。查询字符串不是某种“参数”(尽管这样处理它通常很有用),它是资源URI的一个组成部分。事实上,您可以使用DELETE/api.php?type=employee&id=46&groups=12,15,32
,这仍然是完全RESTful的。REST的全部要点是URI(除其他外)对客户端应该是不透明的
但是,当您想要在一个请求中删除大量组时,查询字符串方法可能会带来问题。如果发生这种情况,最简单的方法是POST/bulkdeletegroups
RPC调用。您也可以考虑<代码>修补程序/雇员/ 46 /组<代码>(但请先阅读)。没有标准化的大部分同意,但是<代码>修补程序确实不适合资源删除:如果您正确地应用语义,则结束了空资源(或其演示文稿)。而不是不确定的组。@DaSourcerer/employees/46/groups
是所有组(其中employee46是成员)的集合。我们只想移除其中的一些。因此,我们用一个描述要删除哪些组的文档来修补该集合。唯一的问题是,您需要仔细选择该文档的格式,并为其指定正确的内容类型。可能很适合这里。@DaSourcerer我不完全同意。F.e.有一个remove
操作,用于从对象或列表中删除值。虽然对于单个文档,这可能只影响该文档的一个条目(每个操作),但如果您缩小至少一个级别,则您处于包含资源的实际目录资源中,因此应该能够删除子资源,而不会有任何大的障碍。重要的是要知道,所有的操作都需要在一个事务中进行(要么全部成功,要么没有成功)@RomanVottner@VasiliyFaronov我明白你的意思,但请相信我:你错误地评估了JSON补丁中补丁
方法的语义以及删除
操作的范围。只是慢慢地重新阅读你写的内容,并将其与规格进行比较。你会得出结论,你将要使用错误的工具来完成错误的工作。@DaSourcerer也许你可以在这里发布一篇文章来解释这一点?
DELETE /employees?id=12&id=15&id=32