Twitterがサーバーダウンした時に出すTwitter APIのレスポンスを列挙してみる。[Ruby Twitter gem]

先日(2016/1/19)に大規模なTwitterのサーバー障害に見舞われました。その時に自分が運営していたサイトのログを確認してどのようなエラーがTwitter側から返ってきたか確認したいと思います。

なお、Ruby Twitter gemを使った上での結果です。

具体的にどのようなエラーが発生したか

Twitter::Error::ServiceUnavailable (Over capacity):
Twitter::Error::InternalServerError (Internal error):
Twitter::Error::RequestTimeout (Net::ReadTimeout):

までは分かるのですが、

Twitter::Error (784: unexpected token at '<!DOCTYPE html>

としまいにはJSONでなくHTMLを返されてしまったようで…鯖落ちした時のエラーのレスポンスの返り方はもう予測不可能ですねw

で、結局どう例外処理すればいいの?

結論としましては、

  1. まずはTwitter関連で発生したエラーのデフォルトの処理を記述する
    (内容はTwitterがサーバーダウンした場合を想定)
  2. TooManyRequests(API制限で利用不可)
    Unauthorized(鍵垢、トークン無効などの理由で読み取り不可)
    Forbidden(140字以上のツイートなどの理由で拒否)
    などユーザー側の操作の理由で発生したエラーの捕捉

をしたほうがいいと思います。

例えばRailsで書くとするとこんな感じでしょうか

class ApplicationController < ActionController::Base
  #rescue_from節は下のほうほど優先順位が高いため、Twitter::Errorの例外は一番上に書きそのサブクラスの例外を下に記述すること。
  rescue_from Twitter::Error, with: :twitter_server_error
  rescue_from Twitter::Error::TooManyRequests, with: :twitter_too_many_requests
  rescue_from Twitter::Error::Unauthorized, with: :twitter_unauthorized
  rescue_from Twitter::Error::Forbidden, with: :twitter_forbidden

  def twitter_server_error
   #Twitterが鯖落ちした時の処理を記述
  end

  #以下同様にしてエラー時の処理を行う各メソッドを記述
end

コメントを残す

メールアドレスが公開されることはありません。