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 状态代码来指示错误,即使没有技术错误,我们也会开始在日志等中进行标记。
我有一堆对输入资源执行操作的 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 状态代码来指示错误,即使没有技术错误,我们也会开始在日志等中进行标记。