ruby-on-rails - Rails API 应用程序的异常(exception)政策

标签 ruby-on-rails exception policy

我想知道如何管理 Rails API 应用程序中的异常的一般策略。

我认为客户应该只收到那些与其客户逻辑相关的异常。因此,在 Controller 中,我捕获这些异常并发送它的消息。

MainApplicationException 是我的应用程序中所有异常的层次结构顶部异常类。

class MyController < ApplicationController

  def some_action

    ... # processing of the request

    rescue MainApplicationException => error
      render: { :message => error.message }
    end
  end
end

但可以肯定的是,在处理传入请求时很有可能会引发异常。

我应该如何注册这个异常以及我应该在应用程序中的哪里拯救这些异常?我应该把这些消息记录下来吗?有此类问题的教程吗?

最佳答案

异常处理很难!一般来说,尤其是在构建 API 时,很好地掌握 HTTP status codes 非常重要。 。一个简单的例子是 404。例如,假设您正在执行 Company.find(params[:id] ),它将抛出一个 ActiveRecord::RecordNotFound ,并且可以一直捕获该错误应用程序 Controller :rescue_from ActiveRecord::RecordNotFound, :with => :not_found

对于您必须处理的数据也是如此,如果格式(例如您收到的是“application/xml”而不是“application/json”。)不是您所接受的,您可以抛出一个
406.

最难的部分显然是处理用户数据,这里出现的一个重要问题是你想通知用户多少信息?太多信息可能会使您的系统暴露于潜在的黑客攻击。

就我个人而言,我发现如果异常不影响代码的任何其他部分, Controller 是处理异常的好地方。否则,一个不错的方法可能是 Builder pattern它允许您编写响应而无需实际处理 Controller 中的错误。

关于异常处理的书籍有很多,但关于处理 API 错误的简单介绍和资源集合可能是 this blog post

希望这有帮助。

关于ruby-on-rails - Rails API 应用程序的异常(exception)政策,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14840168/

相关文章:

ruby-on-rails - 即使没有挂起的迁移,Rails 迁移也非常缓慢

ruby-on-rails - Rails 3 : Using HTML in i18n form helper translations

java - 使用 JMimeMagic 进行 MIME 类型检查 - MagicMatchNotFoundException

java - Spring Data Rest 的异常

java - AsycTask 抛出 IllegalStateException - fragment 未附加到 Activity

amazon-web-services - AWS Cloudformation 模板 - S3 存储桶策略 - MalformedPolicy 错误

mysql - Elasticsearch for mysql view rails

ruby-on-rails - 在 accept_nested_attributes_for 中无法访问 attr_accessor

android - 安装失败_EAS_POLICY_REJECTED_PERMISSION?

amazon-web-services - 是否可以在与 cloudformation 帐户不同的帐户中调用 lambda?