如何在Ruby on Rails中调用外部API时处理错误/异常?

时间:2012-06-14 17:17:09

标签: ruby-on-rails api exception-handling ruby-on-rails-3.1 error-handling

我正在使用CampaignMonitor's APIruby wrapper (createsend-ruby)进行交互,我只是想知道您对错误/异常处理的建议。我正在考虑如下使用begin / rescue / end,但我只是想知道是否有更好的技术来处理这类事情(当你处理第三方API时)。

begin
  list_id = CreateSend::List.create client_id, title, unsubscribe_page, confirmed_opt_in, confirmation_success_page
rescue Exception => e
  logger.error "[error] CampaignMonitor error: #{e}"
  return false
end

例如,您是否会尝试捕获特定的异常并单独处理它们?

rescue CreateSend::BadRequest => e

或者这只是个人偏好和/或应用程序要求的问题?

感谢您的时间!

1 个答案:

答案 0 :(得分:8)

我通常从一个例外开始捕捉它们并从那里开始。如果有一个特定的错误经常出现或者需要以不同的方式处理,那么只需在另一个上面添加另一个救援块,以便在那里捕获异常。你做对了:)

尽可能避免rescue Exception,一个简单的rescue就可以了。

为了澄清,您可以获得任意数量的救援以及确保:

begin
  do_something
rescue CS::BadRequest => e
  logger.error "..."
rescue CS::TimeoutError => e
  do_something_that_retries
rescue => e
  logger.error "..."
ensure
  send_email_to_admin
end