对于具有“错误”输入的良好请求,使用什么 HTTP 状态?

wim*_*wim 5 api http http-status-codes http-status-code-400 http-status-code-200

我正在编写一个用于验证促销代码的微服务。客户向我发送促销代码和产品 ID (json)。有 200 OK 的情况,代码很好,我为他们的订单申请了折扣。但是有一个错误的情况,促销代码不适用于该产品。我不确定要使用什么响应代码。

这也应该是 200 OK (有某种消息说代码验证失败)?

应该是 400 Bad Request 吗?

两者似乎都不完全合适,当它不是“OK”时说 200 OK 很奇怪,但是 4xx 通常表示请求/http 协议的结构存在问题 - 在这种情况下,请求的结构很好。

小智 5

我会第二次史蒂夫。422 似乎是个不错的选择。

恕我直言,如果请求失败,你不应该使用 200。

使用错误代码并在必要时在响应正文中提供详细信息:

HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json

{ "reason": 1, "text": "Invalid promo code." }
Run Code Online (Sandbox Code Playgroud)

再想一想,我认为 403 很适合这里:

HTTP/1.1 403 Forbidden
Content-Type: application/json

{ "reason": "bad_promo_code" }
Run Code Online (Sandbox Code Playgroud)

归根结底,只要有记录,这并不重要