rest –删除资源
在RESTful API中,通常使用HTTP DELETE方法删除资源。 请求URI标识应删除的资源。 DELETE是幂等的HTTP操作。 多次发送相同的DELETE请求应该只更改一次服务器状态。
删除单个资源
单个REST资源通常由包含唯一标识符的URI标识。 例如,我们可以通过向此URI发送DELETE请求来删除位于/ artists / 123的艺术家资源。
请求:
DELETE /artists/ 123
响应:
HTTP/ 1.1 204 (No content)
服务器可以使用不同的HTTP状态代码响应删除请求:
- HTTP 200(Ok)表示删除成功,并带有其他信息。 在这种情况下,响应主体可以包含已删除的资源或有关删除的一些详细信息。
- HTTP 204(无内容)用于指示成功删除且没有其他信息(响应主体为空)。
- 如果服务器接受了请求,但删除尚未完成,则返回HTTP 202(接受)。 例如,服务器可能已将请求排入队列以在将来的某个时间处理该请求。
如果给定URI处没有资源,则应返回HTTP 404(未找到)状态码。
删除资源后,对资源URI的GET请求应返回HTTP 404(未找到)或HTTP 410(已消失)。
删除资源集合
HTTP DELETE操作还可用于从资源集合中删除所有项目。 例如,我们可以通过向/ artists发送DELETE请求来删除所有艺术家资源。
请求:
DELETE /artists
响应:
HTTP/ 1.1 200 (Ok)
{
"total" : 321
}
在此示例中,服务器使用HTTP 200和包含已删除资源总数的响应正文进行响应。
如果需要,可以将删除操作与查询参数结合使用以过滤集合。 例如,这可能会删除2015年1月1日之前已完成的所有订单。
DELETE /orders?fulfilled-before= 2015 - 01 - 01
尽管删除所有收集元素可能很有用,但支持此操作并不常见。 在REST API中提供此功能之前,您应该三思,如果客户端真的应该能够通过单个请求删除整个集合。
请求主体和DELETE方法
删除请求通常不需要请求正文。 但是,在极少数情况下,删除操作除了需要作为有效内容主体传输的过滤器参数外,可能还需要一些其他指令。
HTTP RFC 7231描述了有效载荷主体对DELETE方法的用法,如下所示:
DELETE请求消息中的有效负载没有定义的语义; 在DELETE请求上发送有效内容正文可能会导致某些现有实现拒绝该请求
在Stackoverflow上,如果请求主体可以并且应该用于DELETE请求,则可以进行冗长的讨论。
我认为应该避免将请求主体用于HTTP DELETE操作。 通常这是出乎意料的,并且可能使某些技术难以跟踪问题。 作为解决方法,可以使用对单独资源的POST请求。
概要
使用HTTP DELETE方法,我们可以删除REST API中的资源。 必要时,DELETE方法也可用于删除整个集合。 服务通常应使用200(正常),202(已接受)或204(无内容)响应码来响应删除操作。
翻译自: https://www.javacodegeeks.com/2020/10/rest-deleting-resources.html
rest –删除资源