【问题标题】:HTTP reponse for error in REST call for Mojolicious针对 Mojolicious 的 REST 调用中的错误的 HTTP 响应
【发布时间】:2012-11-05 20:05:03
【问题描述】:
我使用的 mojolicious 应用程序是基于 JSON 的,即客户端和服务器之间的交互更多是 JSON 结构化数据的交换。
当在一个 REST 调用期间发生错误时,我正在尝试使用正确的 HTTP 响应代码实现一种标准的错误处理方式。实施这样一个标准的最佳方式是什么?我在哪里做?
我看到了几种方法
创建一个类并列出所有错误响应及其相关内容,可以使用响应代码对该类进行调用,该响应代码将返回包含所有相关联的 JSON 结构(哈希和数组的组合)条目,然后在控制器中使用 render_json() 方法并将其作为响应返回给客户端
我可以在数据库中创建一个表,其中包含响应所需的所有字段的条目,使用该字段访问 JSON 结构,创建适当的响应并在控制器中使用 render_json() 并将其返回为对客户的回应。
错误响应示例可能是这样的
{
"Message": "The requested resource is not found"
"Type" : "http://this.is.an.error.com/error/resource_not_found",
"ErrorCode" : 404,
"Created" : "2012-11-05T11:59:29-05:00",
"Request" : "GET /types/Foo/instances"
}
标准化这种响应的正确方法是什么?
【问题讨论】:
标签:
perl
rest
httpresponse
mojolicious
【解决方案1】:
正如 titanofold 所说,我会选择选项 2。
关于错误代码,尽量坚持使用标准HTTP Response Status Codes。
除了在 JSON 中设置 ErrorCode 属性外,您还应该在响应标头中发送状态代码,因为:
- 您可以在一个地方处理错误 - 您的 JavaScript 函数的
error 回调
- 将来您的后端可能会有其他消费者(例如移动应用)
- 这就是发明它们的原因
您可以使用 Mojolicious 轻松实现这一目标:
$self->render_json( {
Message => "The requested resource is not found",
Type => "http://this.is.an.error.com/error/resource_not_found",
ErrorCode => 404,
Created => "2012-11-05T11:59:29-05:00",
Request => "GET /types/Foo/instances",
},
status => 404);
【解决方案2】:
标准的美妙之处在于有很多可供选择,如果您不喜欢其中任何一个,您可以自己制作。
至于 REST 结构,这取决于您。我会选择通用的“代码”而不是“错误代码”,因为您也应该在成功时返回一个代码。
对于您的方法选项,我会选择选项 2。
【解决方案3】:
我也会选择选项 2。但我不明白错误详细信息需要成为数据库的一部分。我宁愿建议您使用基类的 OO 概念来保存所有错误详细信息并将其继承给其他类,确保您可以访问它。