就我个人而言,我会用不同的方式处理。成功的调用只返回JSON对象,我不需要一个更高级别的JSON对象来表示成功和负载,我只是在头部返回适当的HTTP状态码所对应的JSON对象。
但是,如果出现错误(例如400错误),我会返回格式良好的JSON错误对象。例如,如果客户端使用POST方法提交用户信息,其中电子邮件或电话号码格式不正确(即无法插入到数据库中),我将返回以下内容:
{
"description" : "Validation Failed"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Invalid phone number."
} ],
}
重要的部分是"field"属性必须精确匹配无法验证的JSON字段。这允许客户端准确地了解其请求出了什么问题。此外,"message"是请求的区域设置语言。如果“emailAddress”和“phoneNumber”都无效,则“errors”数组将包含两者的条目。 409(冲突)JSON响应体可能如下所示:
{
"description" : "Already Exists"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Phone number already exists for another user."
} ],
}
通过HTTP状态码和这个JSON,客户端具备了响应错误的确定性方式,而不会创建一个试图完全替代HTTP状态码的新错误标准。需要注意的是,这些仅适用于400错误范围内的任何内容。对于200范围内的任何内容,我只需返回适当的内容即可。对于我来说,通常是一种类似HAL的JSON对象,但在这里并不重要。
我考虑增加的一件事是在“errors”数组条目或JSON对象本身的根中添加数字错误代码。但到目前为止我们还没有需要它。