Rest コントローラ

Rest コントローラとは?

Rest コントローラは Base コントローラを継承したもので、RESTful のサポートが組み込まれています。 これは、API を簡単に構築をすることが出来ます。

Please note: もし、REST コントローラの中で before()router メソッドを 使うなら、うまく動作させるために親クラスの parent::before() (または router) を呼び出さなければ いけません

Rest コントローラを使う

すべてのコントローラと同様に、fuel/app/classes/controllerディレクトリ内にクラスを作成します。 それらは Controller_Rest クラスを継承し、"Controller_" というプレフィックスを付けます。 以下は "test" コントローラの例です:

class Controller_Test extends Controller_Rest
{

	public function get_list()
	{
		return $this->response(array(
			'foo' => Input::get('foo'),
			'baz' => array(
				1, 50, 219
			),
			'empty' => null
		));
	}
}

This controller method "list" is called by the following URL:

http://localhost/test/list.json?foo=bar

通常の "action_" プレフィックスの代わりに Rest コントローラは HTTP メソッドをプレフィックスに使います。 対応する HTTP メソッドのプレフィックスのメソッドがない場合は、"action_" プレフィックスにフォールバックします。 Rest コントローラがサポートする HTTP メソッドは次の通りです:

XML Base Node Name

When using XML output you can set the XML basenode by setting the $xml_basenode param.

class Controller_Test extends Controller_Rest
{
	// Set it for the whole controller
	protected $xml_basenode = 'my_basenode';

	// Or inside your controller function
	public function get_items()
	{
		$this->xml_basenode = 'other_basenode';

		return $this->response(array(
			'foo' => Input::get('foo'),
			'baz' => array(
				1, 50, 219
			),
			'empty' => null
		));
	}
}

You can also set the XML basenode app-globally by changing the rest.xml_basenode config setting.

HTTP メソッド 説明
GET 既存のリソースに関する情報を取得するために使われます。ブラウザに URL を入力しアクセスしたり、リンクをクリックしたときに使われます。 REST リソース (ユーザのような) から情報を取得するために最適です。
POST 既存の情報リソースを更新するために使われます。ブラウザはインターネット上の多くの種類のフォームに投稿するために このメソッドを使用します。しかしながら、いくつかのフォームは、 フィールドデータを含むクエリ文字列を送信する GET を使います。
PUT あまり用いられず、ほとんどのブラウザでサポートされていませんが、PUT は新しいリソースを作成するために使われます。
DELETE 同じく多くのブラウザで使われませんが、リソースを削除するために使われます。

出力

{
	"foo":"bar",
	"baz":[1,50,219],
	"empty":null
}

ファイル拡張子が URL で定義されているので、これは JSON として出力されます。デフォルトでは、XML フォーマット出力されるか、 fuel/core/config/rest.php に設定されているフォーマットで出力されます。

対応フォーマット

フォーマットの決定

返される結果のフォーマットを決定するために、REST コントローラは次のアルゴリズムを用います:

In most cases the HTTP_ACCEPT is present and contains (at least) text/html, which is a valid result format. This has the implication that the $rest_format, and any global default defined in the rest.php configuration file, will never be used.

To disable the HTTP_ACCEPT as a valid format source, set the configuration key ignore_http_accept in the rest.php to false.

Note that it is considered bad practice to hardcode any result format in your REST controller. It should be up to the client to specify in which format the result should be returned. In case of HTTP_ACCEPT, most ajax solutions like for example jQuery.ajax() allow you to set the accept header to application/json.

Special controller methods

response($data = array(), $http_code = 200)

このメソッドは、フォーマットと出力ロジックを介して応答データを送信するために使用されます。 必要に応じて、2 番目のパラメータとしてステータスコードを設定することができます。