假设我有一个资源(例如: /api/shipments/100
),其支持HTTP DELETE方法。 正如你可以从URI本身的理解,如果删除请求此URI,则此资源将被删除。
在我目前的情况下,删除请求只能成功,如果满足特定条件如下进行:
- 如果装载状态未设置为在途或交付。
如果针对URI和上述条件的删除请求得不到满足,其HTTP状态代码会更合适在这种情况下返回? 我曾经想过以下的人,但不能决定哪一个更语义:
- 405不允许的方法
- 403禁止
- 409冲突
假设我有一个资源(例如: /api/shipments/100
),其支持HTTP DELETE方法。 正如你可以从URI本身的理解,如果删除请求此URI,则此资源将被删除。
在我目前的情况下,删除请求只能成功,如果满足特定条件如下进行:
如果针对URI和上述条件的删除请求得不到满足,其HTTP状态代码会更合适在这种情况下返回? 我曾经想过以下的人,但不能决定哪一个更语义:
我会去409: Conflict
,因为你有什么是违反资源状态。
405: Method Not Allowed
也将工作。 如果你想使用一个405
,你必须发送一个Allow
头,表示支持的方法,以及支持的方法将改变depeding对资源的状态。 在我看来,这个响应代码非常适合用于只读资源,资源不能被删除等,但达雷尔的意见,这个帖子是有效的。 该规范是模糊的:
在Request-Line中指定的方法是不允许由请求URI标识的资源。 响应必须包括一个允许包含用于所请求的资源的有效方法的列表标题。
在这两种情况下,你应该提供响应主体信息的客户理解错误的根源。
至于提到的其他两种方法:
403: Forbidden
时,应使用不具有相应的权限修改的资源,也就是说,如果你要删除该资源管理员,在你不在。
412: Precondition Failed
是主要用于在先决条件在请求头明确指定条件请求。 例如,你可以有应进行,只有当条件PUT请求If-Match
标头是有效的。 如果你没有在请求头中指定什么,我还是会选择在409 412下面是412的规格:
的前提条件中的一个或多个评估为假请求 - 报头字段的给定的,当它被在服务器上进行测试。 此响应码允许客户端放置在当前资源的元信息的先决条件(首部字段的数据),从而防止所请求的方法被施加到一个比预期的其他的资源。
我会用412:前提条件失败。
请参阅此为HTTP状态码
网络状态代码