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

use*_*833 7 api error-handling exception-handling ruby-on-rails ruby-on-rails-3.1

我正在使用ruby包装器(createsend-ruby)CampaignMonitor的API进行交互, 我只是想知道你对错误/异常处理的推荐.我正在考虑如下使用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
Run Code Online (Sandbox Code Playgroud)

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

rescue CreateSend::BadRequest => e
Run Code Online (Sandbox Code Playgroud)

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

感谢您的时间!

ben*_*sie 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
Run Code Online (Sandbox Code Playgroud)

  • `rescue`自己从'StandardError`及其子节点获救,这是你99%的时间都需要的,而`rescue Exception`在链上更高,从信号,系统退出,没有内存错误和脚本错误中获救.除非你出于特殊原因使用`rescue Exception`,否则你不应该使用它. (4认同)