退款的HTTP响应代码已经完成

时间:2017-11-24 11:09:42

标签: rest http

我正在编写rest api,它将事务id作为输入并处理指定事务的退款。因此,我可能会收到同一笔交易的多个退款请求。但退款只能处理一次。如果退款已经完成并且我收到了相同交易退款的重复请求,那么响应代码应该是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用403表示禁止操作,或409表示资源状态存在冲突:

  

6.5.3. 403 Forbidden

     

403(禁止)状态代码表示服务器理解请求但拒绝授权。希望公开请求被禁止的服务器可以在响应有效负载中描述该原因(如果有的话)。

     

如果请求中提供了身份验证凭据,则服务器认为它们不足以授予访问权限。 [...]但是,出于与凭证无关的原因,可能会禁止请求。 [...]

  

6.5.8. 409 Conflict

     

409(冲突)状态代码表示请求不能     由于与目标的当前状态发生冲突而完成     资源。此代码用于用户可能的情况     能够解决冲突并重新提交请求。服务器     应该生成一个包含足够用户信息的有效负载     认识到冲突的根源。 [...]

在响应paylod中返回错误的良好描述至关重要。您可以使用RFC 7807作为参考。

答案 1 :(得分:0)

您可以使用 423 锁定。与 422 Unprocessable Entity 可以用来表示由于其状态无法处理请求不同,423 Locked 可以用来表示由于资源状态无法处理请求.

403 的问题在于它与授权有关,告诉请求用户没有足够的权限,这意味着可以通过提升权限来完成。

409 的问题在于它表明用户可以解决冲突并稍后重试。

423 的另一个问题是它可以被解锁。至少它通过告诉“由于源状态而无法处理请求”来接近它,这很合适。