我正在编写一个用于验证促销代码的微服务。客户向我发送促销代码和产品 ID (json)。有 200 OK 的情况,代码很好,我为他们的订单申请了折扣。但是有一个错误的情况是促销代码不适用于该产品。我不确定要使用什么响应代码。
这也应该是 200 OK(带有某种消息说代码验证失败)吗?
应该是 400 Bad Request 吗?
两者似乎都不完全合适,当它不是“OK”时说 200 OK 很奇怪,但是 4xx 通常表示请求/http协议的结构存在问题 - 在这种情况下,请求的结构很好。
我正在编写一个用于验证促销代码的微服务。客户向我发送促销代码和产品 ID (json)。有 200 OK 的情况,代码很好,我为他们的订单申请了折扣。但是有一个错误的情况是促销代码不适用于该产品。我不确定要使用什么响应代码。
这也应该是 200 OK(带有某种消息说代码验证失败)吗?
应该是 400 Bad Request 吗?
两者似乎都不完全合适,当它不是“OK”时说 200 OK 很奇怪,但是 4xx 通常表示请求/http协议的结构存在问题 - 在这种情况下,请求的结构很好。
我会第二个steveax。422似乎是一个不错的选择。
恕我直言,如果请求失败,您永远不应该使用 200 。
使用错误代码,如有必要,请在响应正文中提供详细信息:
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
{ "reason": 1, "text": "Invalid promo code." }
再想一想,我认为 403 很适合这里:
HTTP/1.1 403 Forbidden
Content-Type: application/json
{ "reason": "bad_promo_code" }
归根结底,只要有记录就没有关系。
我会建议409:
10.4.10 409 冲突
由于与资源的当前状态冲突,无法完成请求。仅在预期用户可能能够解决冲突并重新提交请求的情况下才允许使用此代码。