REST API & HTTP 状态代码

REST API & HTTP Status Code

我有一堆对输入资源执行操作的 PUT 操作。 让我们举个例子:我在我的 API 中有一个支付操作,它声明信用卡必须按特定金额收费。 在我的代码中,我首先验证卡上是否有足够的信用额度,然后执行操作。如果数量不够,我只是 return 400,但我不确定它是否正确。

在这种情况下,哪个是正确的 HTTP 状态代码?

我当然可以发送带有 HTTP 200 的响应,并附上一个负载,其中包含解释错误的更多详细信息。我还可以发回 HTTP 400 Bad Request 或更好的 HTTP 412 Precondition Failed.

在这种验证失败的情况下,在响应中发送的正确代码是什么?是否有任何资源可供我阅读以了解 HTTP 状态代码和 HTTP 动词背后的基本原理?

使用 422 无法处理的实体。

422 状态代码表示服务器了解请求实体的内容类型(因此 415 Unsupported Media Type 状态代码不合适),并且请求实体的语法正确(因此 400 Bad Request 状态代码不合适)但无法处理包含的说明。

否则,只需将 400 用于与您的业务域有关的任何错误。自 2004 年 6 月起,错误 400 的描述已修改为:

The server cannot or will not process the request due to something that is perceived to be a client error

如果由于用户发送的数据导致操作失败(似乎是这种情况),您应该使用状态代码 400(一般)或 422(更精确但来自WebDAV 规范)。您可以 return 返回有关有效负载中错误的其他提示(结构由您决定),例如:

{
    error: {
       "field": "amount",
       "message": "The amount isn't correct - Sufficient credit."
    }
}

我认为代码 412 不适用于此处,因为当您的服务器不满足客户端指定的条件时必须 returned(请参阅 headers If-* 喜欢 If-Match, If-Modified-Since, ...).

希望对你有帮助, 蒂埃里

IMO:我会坚持使用 200,然后解析响应并进行处理。 HTTP 状态代码是协议状态代码,不是您应该用来处理应用程序逻辑的代码。

{
    "error": {
       "field": "amount",
       "message": "The amount isn't correct - Sufficient credit."
    }
}

在上述代码的情况下,服务调用工作正常,保证了 return 代码 200。但是,您的应用程序逻辑现在需要处理报告的错误。

如果我们使用 HTTP 状态代码来指示错误,即使没有技术错误,我们也会开始在日志等中进行标记。