tug*_*erk 16 http http-status-codes http-delete asp.net-web-api
假设我有一个/api/shipments/100支持HTTP DELETE方法的资源(例如:).正如您可以从URI本身理解的那样,如果针对此URI发出DELETE请求,则将删除此资源.
在我当前的场景中,只有满足某个条件,才能成功执行DELETE请求,如下所示:
如果存在针对该URI的DELETE请求并且不满足上述条件,那么在这种情况下哪个HTTP状态代码更适合返回?我已经考虑过以下的但是无法确定哪一个更具语义:
Ale*_*ian 18
我会去409: Conflict,因为你所拥有的是对资源状态的违反.
405: Method Not Allowed也会有用.如果您想使用a 405,则必须发送Allow标头以指示支持的方法,并且受支持的方法将根据资源的状态而变化.在我看来,这个响应代码非常适合只读资源,无法删除的资源等,但Darrel对这篇文章的评论是有效的.规范含糊不清:
请求行中指定的方法不允许由Request-URI标识的资源.响应必须包含一个Allow标头,其中包含所请求资源的有效方法列表.
在任何一种情况下,您都应该在响应正文中提供信息,以便客户端了解错误的来源.
关于提到的其他两种方法:
403: Forbidden 如果您没有相应的权限来修改资源,则应该使用,即如果您必须是管理员才能删除该资源而您不是.
412: Precondition Failed主要用于条件请求,其中前提条件在请求标头中明确指定.例如,您可以拥有条件PUT请求,只有在If-Match标头有效时才应执行这些请求.如果你没有在请求标题中指定任何内容,我仍然会选择409 over 412.这是412的规范:
在服务器上测试时,一个或多个请求标头字段中给出的前提条件被评估为false.该响应代码允许客户端在当前资源元信息(头字段数据)上放置前提条件,从而防止所请求的方法应用于除预期的资源之外的资源.
| 归档时间: |
|
| 查看次数: |
4588 次 |
| 最近记录: |