3

我使用的 mojolicious 应用程序是基于 JSON 的,即客户端和服务器之间的交互更多是 JSON 结构化数据的交换。

当在一个 REST 调用期间发生错误时,我正在尝试使用正确的 HTTP 响应代码实现一种标准的错误处理方法。实施这样一个标准的最佳方式是什么?我在哪里做?

我看到了几种方法

  1. 创建一个类并列出所有错误响应及其相关内容,可以使用响应代码对该类进行调用,该响应代码将返回包含所有相关条目的 JSON 结构(哈希和数组的组合),然后使用 render_json () 方法并将其作为响应返回给客户端

  2. 我可以在数据库中创建一个表,其中包含响应所需的所有字段的条目,使用该字段访问 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" 
}

标准化这种响应的正确方法是什么?

4

3 回答 3

5

正如 titanofold 提到的,我会选择选项 2。

关于错误代码,尽量坚持使用标准的HTTP 响应状态代码。除了ErrorCode在 JSON 中设置属性外,您还应该在响应标头中发送状态代码,因为:

  • 您可以在一个地方处理错误 - errorjavascript 函数的回调
  • 将来您的后端可能会有其他消费者(例如移动应用程序)
  • 这就是它们被发明的原因

您可以使用 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);
于 2012-11-05T20:51:02.743 回答
2

标准的美妙之处在于有很多可供选择,如果您不喜欢其中任何一个,您可以自己制作。

至于 REST 结构,这取决于您。我会选择通用的“代码”而不是“错误代码”,因为您也应该在成功时返回一个代码。

对于您的方法选项,我会选择选项 2。

于 2012-11-05T20:18:37.407 回答
1

我也会选择选项 2。但我不明白错误详细信息需要成为数据库的一部分。我宁愿建议您使用基类的 OO 概念来保存所有错误详细信息并将其继承给其他类,确保您可以访问它。

于 2012-12-13T21:00:17.477 回答