是否存在从API构建JSON响应的标准或最佳实践?显然,每个应用程序的数据都是不同的,所以我不太关心,而是“响应样板”,如果你愿意的话。我的意思是:
成功的请求:
{
"success": true,
"payload": {
/* Application-specific data would go here. */
}
}
失败的请求:
{
"success": false,
"payload": {
/* Application-specific data would go here. */
},
"error": {
"code": 123,
"message": "An error occurred!"
}
}
我想事实上的标准还没有真正出现(可能永远不会)。但无论如何,我的看法是:
成功的请求:
{
"status": "success",
"data": {
/* Application-specific data would go here. */
},
"message": null /* Or optional success message */
}
失败的请求:
{
"status": "error",
"data": null, /* or optional error payload */
"message": "Error xyz has occurred"
}
优势:成功和错误案例中的顶级元素相同
缺点:没有错误代码,但如果您愿意,您可以将状态更改为(成功或失败)代码,或者-您可以添加另一个名为“代码”的顶级项。
建议的基本框架看起来不错,但定义的错误对象太有限。人们通常不能用一个值来表达问题,而是需要一系列问题和原因。
我做了一点研究,发现返回错误(异常)最常见的格式是以下形式的结构:
{
"success": false,
"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规范一致。
您可以在以下位置找到实现此功能的完整开源库:Mendocino JSON Utilities。该库支持JSON对象以及异常。
详细信息在我关于JSON REST API中的错误处理的博客文章中讨论