我当前的项目,一个安静的API,验证POST请求以创建新用户并且可能发生多个错误(具有HTTP状态):
我是否应该立即发回这样的JSON响应
new_educ
如果检测到错误,或者如果我累积所有错误会更好:
{
"status": 400,
"Message": "No username is set"
}
最后一种方法不需要多个请求来发送有效的有效载荷。但是应该使用哪个状态代码,如果未设置用户名(400 Bad Request)或服务器无法访问数据库(500内部服务器错误)?
答案 0 :(得分:3)
我认为如果您预见到一个请求中需要多个错误,那么第二个JSON(具有多个错误)是首选。执行多个错误响应的另一个好处是,作为您的服务的用户,如果我收到多个错误,我可以一次性解决所有错误,而不是在我得到它们时一次解决它们。
答案 1 :(得分:-1)
经过研究,最好的(最标准的)响应方式是这种形式的JSON结构:
{
"error": {
"code": "400",
"message": "main error message here",
"target": "approx what the error came from",
"details": [
{
"code": "23-098a",
"message": "Disk drive has frozen up again. It needs to be replaced",
"target": "not sure what the target is"
}
],
"innererror": {
"trace": [ ... ],
"context": [ ... ]
}
}
}
要放置的多个错误将是“详细信息”数组中的单个元素。使用这种结构,您仍然需要一些错误的整体摘要,但是详细信息将包含所需的任意多个错误消息。
这是OASIS数据标准OASIS OData提出的格式,似乎是目前最标准的选择,但是目前似乎没有任何标准的采用率很高。
这也符合JSON RPC 2.0 Spec,因为它要求错误是“错误”成员中的对象,并且您具有代码和消息。
您可以在Mendocino JSON Utilities中找到实现此目的的完整开源库。该库支持JSON对象以及异常。
有关详细信息,请参见我在Error Handling in JSON REST API上的博客文章