Restful API-JSON响应,带有单个或所有错误
我当前的项目是restful API,它验证创建新用户的POST请求,可能会发生多个错误(HTTP状态):Restful API-JSON响应,带有单个或所有错误,json,rest,error-handling,Json,Rest,Error Handling,我当前的项目是restful API,它验证创建新用户的POST请求,可能会发生多个错误(HTTP状态): 未设置用户名(400 BADDREQUEST) 已使用用户名(409冲突) 服务器无法建立数据库连接(500内部服务器错误) 我是否应该立即发回这样的JSON响应 { “状态”:400, “消息”:“未设置用户名” } 如果检测到错误,或者如果我像下面这样累积所有错误是否更好: { "status": <HTTP STATUS CODE>, "errors"
{
“状态”:400,
“消息”:“未设置用户名”
}
如果检测到错误,或者如果我像下面这样累积所有错误是否更好:
{
"status": <HTTP STATUS CODE>,
"errors": [
{"message": "Username is not set."},
{"message": "Can't access the database."}
]
}
{
“地位”:,
“错误”:[
{“消息”:“未设置用户名。”},
{“消息”:“无法访问数据库。”}
]
}
最后一种方法不需要多个请求来发送有效负载。但是,如果没有设置用户名(400个错误请求)或者服务器无法访问数据库(500个内部服务器错误),那么应该使用哪个状态代码呢?我认为如果您预见到一个请求中需要多个错误,那么第二个JSON(有多个错误)是首选的。执行多个错误响应的另一个好处是,作为您服务的用户,如果我返回多个错误,我可以一次性解决所有错误,而不是一次解决一个错误。经过一些研究,最好(最标准)的响应方式是以下形式的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": [ ... ]
}
}
}
要放置的多个错误将是“details”数组中的单个元素。使用此结构,您仍然需要一些错误的总体摘要,但是详细信息将包含您想要的任何单个错误消息
这是OASIS数据标准提出的格式,似乎是最标准的选择,但目前任何标准的采用率似乎都不高
这也符合,因为它要求错误是“error”成员中的对象,并且您有代码和消息
您可以在以下位置找到实现此功能的完整开源库:。该库支持JSON对象和异常
有关详细信息,请参阅我在上的博客文章。您是否看到自己收集异常?通常情况下,我会想象,一个例外被处理,而不是一个表演停止或其停止请求。我无法想象收集异常。也许我应该在每次出现错误时返回一个错误响应。但是为什么异常应该停止请求呢?如果有效负载无效,我将不会将用户添加到数据库中。如何在一个请求中获得多个错误?假设我得到一个已使用用户名而不是字母数字的请求。第一次验证检查将失败。。。我猜是字母数字支票。它不会去DB查找它。这就是一次发送多个错误的好处,但是在第二个JSON中有不同的状态代码。但我会坚持每个请求一个错误的方法。是的,我同意,因为你不会遇到两个错误。这就是为什么我在回答中提到“如果你预见到在一个请求中需要多个错误”。如果不符合该标准,则继续使用第一个标准。