这是此场景的正确响应代码—207 vs 400状态码



我正在设计的API,其中所有以下三种情况都是可能的

  1. 数组中的所有输入都是正确的,因此此API将返回200状态码

    输出示例:200状态码

    [{ "status" : "success", "value" : "some response" }, { "status" : "success", "value" : "some response" }] 
    
  2. 数组中的几个输入是正确的,所以这个API将返回207 Multi-Status代码

    输出示例:207 Multi-Status code

    [{ "status" : "success", "value" : "some response" }, { "status" : "fail", "value" : "reason for failure" }, { "status" : "success", "value" : "some response" }] 
    
  3. 数组中的所有输入都是错误的。在这种情况下,我需要发送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"
}]
}

相关内容

  • 没有找到相关文章

最新更新