プラグインでのエラーの扱い

概要

プラグイン内部で発生した例外のうち、そのプラグイン自身によって補足されなかった物は、すべて、入力メッセージに対するエラーレスポンスとして返されます。この時のエラーレスポンスのステータスコードは500(Internal Errorを意味する)です。

整形されたエラー情報を返したい場合は、低レベルのエラーを捕捉した上で、Droonga::ErrorMessage::BadRequestまたはDroonga::ErrorMessage::InternalServerErrorを継承したカスタムエラークラスでラップして再度raiseして下さい。 (ちなみに、これらの基底クラスはプラグインの名前空間に初期状態でincludeされているため、エラークラスの定義時には単にclass CustomError < BadRequestなどと書くだけで参照できます。)

組み込みのエラークラス

組み込みのプラグインやDroonga Engine自身によってあらかじめ定義されているエラークラスとしては、以下の物があります。

Droonga::ErrorMessage::NotFound

データセットまたは指定された情報ソースの中に、探している情報が見つからなかったことを示す。例:

# 第2引数はエラーの詳細な情報。(省略可能)
raise Droonga::NotFound.new("#{name} is not found!", :elapsed_time => elapsed_time)

Droonga::ErrorMessage::BadRequest

文法エラーやバリデーションエラーなど、入力メッセージ自体にエラーが含まれていたことを示す。例:

# 第2引数はエラーの詳細な情報。(省略可能)
raise Droonga::NotFound.new("Syntax error in #{query}!", :detail => detail)

Droonga::ErrorMessage::InternalServerError

タイムアウト、ファイル入出力のエラーなど、その他の未知のエラーであることを示す。例:

# 第2引数はエラーの詳細な情報。(省略可能)
raise Droonga::MessageProcessingError.new("busy!", :elapsed_time => elapsed_time)

組み込みのステータスコード

エラーのステータスコードとしては、以下のステータスコードか、もしくは慣習に従ったステータスコードを使用します。

Droonga::StatusCode::OK
200と等価。
Droonga::StatusCode::NOT_FOUND
404と等価。
Droonga::StatusCode::BAD_REQUEST
400と等価。
Droonga::StatusCode::INTERNAL_ERROR
500と等価。