我想知道如何管理 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/