为了值得,我做了不同的事情。成功的调用仅包含JSON对象。我不需要更高级别的JSON对象,该对象包含指示true的成功字段和具有JSON对象的有效负载字段。我只返回带有200或200范围内的适当JSON对象的标头中的HTTP状态。
但是,如果发生错误(400系列中的某个错误),我将返回格式正确的JSON错误对象。例如,如果客户端使用电子邮件地址和电话号码发布用户,而其中之一格式错误(即我无法将其插入我的基础数据库中),我将返回以下内容:
{
"description" : "Validation Failed"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Invalid phone number."
} ],
}
这里重要的一点是,“ field”属性必须与无法验证的JSON字段完全匹配。这使客户可以准确地知道他们的请求出了什么问题。另外,“消息”在请求的区域中。如果“ 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对象,但这在这里并不重要。
我想添加的一件事是“错误”数组条目或JSON对象本身的根目录中的数字错误代码。但是到目前为止,我们还不需要它。