【问题标题】:HTTP reponse for error in REST call for Mojolicious针对 Mojolicious 的 REST 调用中的错误的 HTTP 响应
【发布时间】:2012-11-05 20:05:03
【问题描述】:

我使用的 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" 
}

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

【问题讨论】:

    标签: 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 概念来保存所有错误详细信息并将其继承给其他类,确保您可以访问它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-13
        • 2019-10-30
        • 1970-01-01
        • 2023-03-20
        • 2017-08-27
        • 2018-02-18
        相关资源
        最近更新 更多