我正在设计的API,其中所有以下三种情况都是可能的
-
数组中的所有输入都是正确的,因此此API将返回200状态码
输出示例:200状态码
[{ "status" : "success", "value" : "some response" }, { "status" : "success", "value" : "some response" }]
-
数组中的几个输入是正确的,所以这个API将返回207 Multi-Status代码
输出示例:207 Multi-Status code
[{ "status" : "success", "value" : "some response" }, { "status" : "fail", "value" : "reason for failure" }, { "status" : "success", "value" : "some response" }]
-
数组中的所有输入都是错误的。在这种情况下,我需要发送400错误请求(OR) 207状态码吗?
因为如果我发送400个错误请求,那么响应格式将不像下面那样一致
示例输出:400状态码
{"errorcode" : "XXXXXX", "message" : "It is failed due to invalid inputs. Input must contain XXXX"}
在案例3中,我是否需要发送400状态码响应或207状态码响应,所有状态都为'FAIL' ?哪个是正确和一致的?
2xx和4xx代码之间存在巨大差异。
2xx(如207)表示请求有效并返回值(成功或失败)。
但是像400这样的4xx代码意味着客户端发送了一个无效的请求。
例如,如果您必须在数组中提供至少一个输入,而客户端请求使用空数组,那么这是一个糟糕的请求。
在您的示例中,请求看起来有效,并且您有2xx和4xx的混合行为。
如果客户端能够使用你的部分结果,那么它是207,如果他可以使用successes
而不使用failures
,那么结果是2xx。如果他不能并且他需要每个输入都是有效的,那么它就是4xx,因为请求应该只包含有效的输入(只导致成功)。
例如在情形3中,400是有意义的因为用户不能在失败的情况下继续他的过程。
您应该能够通过添加属性"details"来格式化此错误。包含输入失败的数组,如
400
{
"errorcode" : "XXXXXX",
"message" : "Only invalid inputs. Input must contain XXXX",
"details" : [{
"status" : "fail",
"value" : "reason for failure"
}, {
"status" : "fail",
"value" : "reason for failure"
}, {
"status" : "fail",
"value" : "reason for failure"
}]
}