Mojolicious REST 调用中错误的 HTTP 响应

2024-04-12

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

标准化此类响应的正确方法是什么?


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

关于错误代码, 尽量坚持标准HTTP 响应状态代码 http://en.wikipedia.org/wiki/List_of_HTTP_status_codes。 除了设置ErrorCodeJSON 中的属性,您应该在响应标头中发送状态代码,因为:

  • 您可以在一个地方处理错误 -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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mojolicious REST 调用中错误的 HTTP 响应 的相关文章

  • 使用 python 更新 Google 搜索方法

    我试图使用xgoogle https github com pkrumins xgoogle但我已经 3 年没有更新了 即使我设置每页 100 个结果 我也只能得到不超过 5 个结果 如果有人使用 xgoogle 没有任何问题 请告诉我 现
  • Term::ReadLine - 我需要点击向上箭头两次才能检索历史记录

    我正在使用 Term ReadLine 并遇到一个奇怪的问题 我需要点击向上箭头两次才能从 addhistory 中检索项目 这是我正在使用的脚本 use Term ReadLine my term Term ReadLine gt new
  • 如何限制 JSON 访问?

    我有一个 Web 应用程序 可以从新创建的 JSON API 中提取数据 我的静态 HTML 页面通过 JavaScript 从静态 HTML 页面动态调用 JSON API 如何限制对 JSON API 的访问 以便只有我 我的网站 可以
  • Perl 的 grep 函数如何与正则表达式一起使用?

    以下 grep 函数如何工作 什么作用 0o1Iil do chars grep 0o1Iil 0 9 A Z a z use Data Dumper print Dumper chars 在 chars中生成以下内容 VAR1 0 VAR
  • Perl 单元测试只针对模块,而不针对程序吗?

    我在网上找到的文档和我拥有的书 Perl测试 或者说或者建议 Perl 的单元测试通常是在创建模块时完成的 这是真的 有没有办法使用单元测试实际程序Test More和表兄弟姐妹 当然 您可以使用测试脚本测试 更多 http search
  • Moose:属性值更改时缓存的计算结果会过期吗?

    在我们的类中 我们有一个模式 我们创建一个属性来表示 计算值 出于显而易见的原因 我们想要缓存计算值 然后当基础值之一发生变化时使缓存失效 所以我们目前有这个 package FooBar use Moose has foo gt acce
  • 如何在 perl 程序中查找打开的全局文件句柄

    我刚刚发现一个问题 我必须关闭所有打开的文件句柄才能让我的 Apache cgi 脚本继续 我将问题追溯到 Parse RecDescent usr bin env perl use strict use warnings use feat
  • 找不到 DBI.pm

    我正在尝试启动这个脚本 usr bin perl use DBI my dbh DBI gt connect dbi Oracle host lonlin2 sid TIMFX1AD port 1524 xbsesdbo xbsesdbo1
  • NodeJS:将 JSON 保存到 MongoDB

    我正在尝试从 API 获取 JSON 并将其存储到 MongoDB 数据库中 显然 这是行不通的 我的应用程序似乎停留在我尝试将数据保存到数据库的位置 请告知该怎么做 这是我的代码 var express require express v
  • Perl 是否有相当于 Python 的 `if __name__ == '__main__'` 的功能?

    有没有一种方法可以确定当前文件是否是 Perl 源中正在执行的文件 在 Python 中 我们使用以下结构来做到这一点 if name main This file is being executed raise NotImplemente
  • 向用户提示多个问题(是/否和文件名输入)

    我想问用户多个问题 我有两种类型的问题 是 否或文件名输入 我不知道如何将这一切放入一个好的if结构 我不确定是否也应该使用 else 语句 有人可以帮我们解决这个问题吗 这是我到目前为止所拥有的 print Do you want to
  • Ruby on Rails REST 设计问题 - 在账户之间转账

    我有一个 Account 类 想要实现转账屏幕以允许用户在 2 个账户之间转账 我将如何实现这种 RESTful 方式 我有标准帐户和休息操作 那很好 但我该如何实现转移呢 通常我只会向帐户控制器和相应的视图添加一个名为 transfer
  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho
  • 在 Ubuntu 中执行 .cgi 文件

    我在 Ubuntu 下运行 Apache PHP 当我运行 cgi 文件时 通过http localhost mycgi cgi 浏览器将显示代码而不是运行它 如何让浏览器执行 CGI 文件而不是显示其内容 将这些行添加到您的 apache
  • 如何使用 Perl CGI 脚本提供图像?

    我的 Google fu 让我失望了 如何使用 Perl 提供已生成的图像 Example img src getimage pl getimage pl 里有什么 干得好 usr bin perl w my file inner nav
  • 在 qx 运算符中将 perl 数组拆分为单独的参数

    我试图将一组参数传递给qx操作员 考虑 my files qw A txt B txt print qx ls files 这给出了错误 ls cannot access A txt B txt No such file or direct
  • 在 Perl 中使用数据引用的正确方法

    我有一组想要处理的数据 为了简化我的代码 最好通过指向原始数据的引用数组来访问我的数据的某些子集 比解释更好的是 我写下了这个例子 它还没有工作 最后 我想更新原始数据 而不必更新所有子集 用 Perl 可以做这样的事情吗 usr bin
  • Perl:HTTP::微小删除留下损坏的锚标记

    我编写了一个脚本 该脚本收集从数据库读取的缓冲区内的所有 URL 检查该页面是否仍然存在 并使用 HTTP Tiny 从缓冲区中删除 URL 如果该 URL 无法访问或返回无效 问题是 HTTP Tiny 删除左锚标记 例如此处无效的文本
  • 自托管 WCF REST 服务和基本身份验证

    我创建了一个自托管的 WCF REST 服务 带有 WCF REST Starter Kit Preview 2 中的一些额外内容 这一切工作正常 我现在正在尝试向服务添加基本身份验证 但我在 WCF 堆栈中遇到了一些相当大的障碍 这阻止了
  • 如何在附加的 sqlite 数据库中创建外键?

    我正在尝试创建一个 sqlite3 数据库作为模拟生产环境的测试环境 由于生产的设置方式 表处于多个模式中 我已经在 DBIx Class 中设置了类 使用 schema gt storage gt dbh do将数据库与架构附加在一起 并

随机推荐

  • Apple Mach-O 链接器错误 lxml

    我刚刚将 xcode 升级到 4 5 现在编译时出现错误 ld library not found for lxml2 2 7 3 cland error linker command failed with exit code 1 升级后
  • 窗口函数或公共表表达式:计算范围内的前几行

    我想使用窗口函数来确定每一行满足特定条件的先前记录的总数 一个具体的例子 clone d test Table pg temp 2 test Column Type Modifiers id bigint date timestamp wi
  • 基于编译时类型的调度

    遵循 现代 C 设计 的技术 我正在实现一个具有各种编译时优化的持久性库 如果模板化成员变量派生自给定类 我希望能够将函数分派给该变量 template
  • Workbox:构建项目时无法缓存所有文件

    I use Vuejs我用workbox webpack plugin为了使我的网站离线 我想缓存一个包含我所有文件 3个文件 的文件夹 如下图所示 但是当我构建我的项目时 使用Laravel mix The main js 包含 Vue
  • android中contentprovider和contentResolver有什么区别

    有什么区别内容提供商 and 内容解析器 我不想为SQLite数据库 我正在开发一个媒体应用程序 我找到了一些解释here http www androiddesignpatterns com 2012 06 content resolve
  • 如何在多个分支上同时工作

    这是后续这个问题 https stackoverflow com questions 8453039 cleaning my git branch of features in development关于创建分支 让我感到奇怪的是 我仍然会
  • 显示多个表中的列

    我正在尝试从两个表中获取列名 我尝试了如下查询 SHOW COLUMNS FROM users UNION SHOW COLUMNS FROM posts 但这不起作用并返回语法错误 我尝试使用相同的查询DESCRIBE但这也不起作用 如何
  • 自定义强类型 BindingSource 项目添加

    我想自定义添加一个新项目到BindingSource 均为强类型 如以下 MSDN 文章所述 如何 使用 Windows 窗体 BindingSource 自定义项目添加 http msdn microsoft com en us libr
  • CSS:固定大小的div,固定垂直位置并水平居中?

    在CSS中 是否可以有一个 div 它既水平居中又固定在浏览器底部 我正在为内部 div 使用设置的宽度和高度 我试过放一个divposition relative在固定的外部 div 内 垂直对齐内容 但外部 div 不居中 我又回到了原
  • 为什么Kotlin for Android Developers(书)需要再次添加扩展parseList?

    我知道 Anko 提供了 parseSingle parseOpt 和 parseList 函数 我不明白为什么 Android 开发者 书 的代码需要再次设计扩展 parseList 你可以告诉我吗 谢谢 https github com
  • 角度 4 |如何在点击时动态注入指令?

    美好的一天 如何实现在单击按钮时注入自定义指令 请参阅下面我的代码
  • nvm安装了node和npm,安装本地browserify时出现符号链接问题

    今天我已经安装了最新版本node通过nvm在 Linux Mint Ubuntu 13 10 上 感谢 nvm 我现在不必将 sudo 命令与 npm 一起使用 这已经解决了一些软件包的问题 node v v0 10 29 npm v 1
  • achartengine - 无法弄清楚如何使用日期作为 x 轴 - 我保存的文件是空的

    我有一个活动 我从编辑文本中获取输入并将其存储在列表中 我还将当前日期存储在列表中 然后 我按保存按钮保存上述内容 第二天 用户再输入一些数据并保存 依此类推 我想制作一个 x 轴日期格式和 y 轴用户输入的值的图 在一项活动中我有 Str
  • NSXMLParser 可以用来解析 HTML [重复]

    这个问题在这里已经有答案了 可能的重复 使用 NSXMLParser 解析 HTML https stackoverflow com questions 8866376 using an nsxmlparser to parse html
  • Xcode:复制标头:公共、私有、项目?

    我正在构建一个 Cocoa Touch 静态库 我应该如何决定是否将头文件复制为公共 私有或项目 Public 该界面已最终确定 可供产品的客户使用 公共标头作为可读源代码包含在产品中 不受限制 Private 该界面不适用于您的客户 或者
  • std::mutex 会创建栅栏吗?

    如果我锁定一个std mutex我总会得到一个记忆栅栏吗 我不确定这是否暗示或强迫你获得栅栏 Update 根据 RMF 的评论找到了这个参考资料 多线程编程和内存可见性 http en wikipedia org wiki Memory
  • 如何深度复制混有特征的类

    这是一些示例 scala 代码 abstract class A val x Any abstract def copy A class b i Int extends A i override def copy new B x class
  • python中,什么时候可以省略self?

    下面定义的代码Duck类由以下组合而成Bill类和Tail班级 我的问题是至于方法about inside Duck类定义 为什么可以写bill description and tail length Is self这里省略了 如果是 我什
  • neo4j cypher节点之间的多重关系

    例如 a r gt b 两个节点之间存在多个r 每个r userId都是唯一的 例如 a r R userId user1 gt b a r R userId user2 gt b 对于 a r gt c 也是如此 而情况是a r gt b
  • Mojolicious REST 调用中错误的 HTTP 响应

    我使用的mojolicious应用程序是基于JSON的 即客户端和服务器之间的交互更多的是JSON结构化数据的交换 我正在尝试实现一种标准方法 当在 REST 调用期间发生错误时 使用正确的 HTTP 响应代码来处理错误 实施此类标准的最佳