Skip to content

Latest commit

 

History

History
138 lines (111 loc) · 5.37 KB

resource_error.wiki

File metadata and controls

138 lines (111 loc) · 5.37 KB

  1. summary リソースエラー

Table of Contents

導入

リソースでのエラー発生はBEARの例外で行います。またPEARエラーや外部ライブラリ(Zend/PEAR)で発生した例外をそのまま返す事もできます。

詳細

ソフトエラーとハードエラー

App/Roリソースでエラーはエラーが発生した瞬間に全ての処理を中断するエラーと、エラーが発生してもクライントにエラーコードやエラー情報を返し処理を続行するエラーがあります。ここでは前者をハードエラー、後者をソフトエラーと呼びます。

例えば認証を前提とするページで「認証リソース」が正常取得できない場合には即HTTP 503画面を出したい場合があるでしょう、続いて他のリソースを取得する必要がない場合です。これはハードエラーです。

一方、商品ページが商品リソースを取得した後に、「レコメンドエンジン」の不調により「その他おすすめ商品リソース」が取得できないとしましょう。ページを即時終了するほでではないエラーです。これはソフトエラーです。

ソフトエラーの種類

基本的に下の2種類です。例外やアノテーション、専用メソッドを使ってエラーを発生させます。

  * 400 Bad Request(呼び出し方に問題がある)
  * 500 Internal Resource Error(リソース内部でエラーが発生)

400 Bad Request

@requiredアノテーション

リクエストエラーのうち「引数に必須項目が無い」というエラーは`@required`アノテーションで簡単に実装できます。

アサーション BEAR_Ro::assert($bool, $msg)

BEAR_Ro::assert($bool, $msg)メソッドで入力項目のチェックができます。コード400のROが返されるのは同じです。

400例外

その他リソース内でリクエストエラーを発生させるには以下のようにします。

専用のリソース例外クラスを用意することができます。

例) App/Ro/Userの例外ファイルはApp/Ro/User/Exception.phpにBEAR_Exceptionを継承した例外クラスを作成します。

500 Internal Resource Error

500 例外

PEARエラーを返しても例外と同じように500のエラーが返ります。 PEAR::MD2やPEAR::HTTP_Clientを利用して、結果が正常かPEARエラーか調べなくてもそのまま返す事ができます。

Zendライブラリなど他のライブラリを利用して例外が発生しても500エラーとして返ります

ハードエラー

HTTPのステータス画面を出力するときにはPanda_Exception例外をthrowします。HTTP画面を出力し処理を即終了します。リソースエラーと違いHTTPコードが全て利用できます。下記は404画面を出すサンプルです。

Panda_Exceptionはリソースに限らず何処でもthrowすることができます。