[FuelPHP 1.7] Restコントローラの出力フォーマットに関するお話
Webチームの日下部です。
FuelPHP(1.7)のRestコントローラによる出力のフォーマット指定にまつわるお話を書いてみます。
いくつか指定方法があるので順番に!
デフォではAcceptの内容をみる
Restの設定のデフォは fuel/core/config/rest.php に記述されていて、その中で出力フォーマットに関しては
'ignore_http_accept' => false, 'default_format' => 'xml',
となっています。これの意味するところは、
- リクエストヘッダのAcceptの内容を無視「しない」
- フォーマット指定がなければXML形式で出力
というものです。
さてこの状態で Advanced REST client を使って、Acceptヘッダをいじらずにリクエストを送ってみると、
Accept: */*
として解釈され、「形式なんでもOK」→「じゃあデフォのXMLどうぞ」となります。
ここで、 Advanced REST client の Headers の欄に
Accept: */json
と書いてリクエストしてみると、「JSONで」→「じゃあJSONどうぞ」となります。
Acceptの内容を無視してみる
コンフィグを上書きしてリクエストヘッダのAcceptの内容を無視するようにしてみます。
fuel/app/config/rest.php を作成して、
return array( 'ignore_http_accept' => true, 'default_format' => 'xml', );
と記述します。この状態で 「Accept: */json」 としても無視されて、「JSONで」→「じゃあXMLどうぞ」となります。
URIによる指定
URI内のアクション名の末尾に .xml という風にフォーマットを付け足すと、コンフィグによらずそのフォーマットで返ってきます。
http://localhost/test/index.xml
コントローラのプロパティによる指定
何よりも優先されるのがコントローラの format プロパティです。
protected $format = null;
デフォでは null がセットされていますが、ここでフォーマットを指定すると、問答無用でそのフォーマットで返却されます。
優先度
まとめると、優先度は
Acceptによる指定 < URIによる指定 < プロパティによる指定
となっています。
というか
ドキュメントに全部書いてありますね。お後がよろしいようで。