我正在编写rest api,它将事务id作为输入并处理指定事务的退款。因此,我可能会收到同一笔交易的多个退款请求。但退款只能处理一次。如果退款已经完成并且我收到了相同交易退款的重复请求,那么响应代码应该是什么?
答案 0 :(得分:2)
您可以使用403
表示禁止操作,或409
表示资源状态存在冲突:
403
(禁止)状态代码表示服务器理解请求但拒绝授权。希望公开请求被禁止的服务器可以在响应有效负载中描述该原因(如果有的话)。如果请求中提供了身份验证凭据,则服务器认为它们不足以授予访问权限。 [...]但是,出于与凭证无关的原因,可能会禁止请求。 [...]
409
(冲突)状态代码表示请求不能 由于与目标的当前状态发生冲突而完成 资源。此代码用于用户可能的情况 能够解决冲突并重新提交请求。服务器 应该生成一个包含足够用户信息的有效负载 认识到冲突的根源。 [...]
在响应paylod中返回错误的良好描述至关重要。您可以使用RFC 7807作为参考。
答案 1 :(得分:0)
您可以使用 423
锁定。与 422
Unprocessable Entity 可以用来表示由于其状态无法处理请求不同,423
Locked 可以用来表示由于资源状态无法处理请求.
403
的问题在于它与授权有关,告诉请求用户没有足够的权限,这意味着可以通过提升权限来完成。
409
的问题在于它表明用户可以解决冲突并稍后重试。
但 423
的另一个问题是它可以被解锁。至少它通过告诉“由于源状态而无法处理请求”来接近它,这很合适。