タイトル募集中3.0

しがないITソルジャーの雑記。

Zend_Rest_Serverについて

ZendFrameworkについてがっつりいろいろやったんだけど,書くのが面倒で更新が滞ってましたが,落ち着いてきたので少し記事を書いていきたいと思います.

まずは,xmlを返すようなシステムを作るために使ったZend_Rest_Serverについて.Content-Typeとかも勝手にtext/xmlにしてくれるので便利なんですが,公式のドキュメント読んでも意味がわからなくてかなり悪戦苦闘しました.(公式:http://framework.zend.com/manual/ja/zend.rest.server.html)

書いてる通りやってるのに動かない.どうなってんのって感じだった.だから一生懸命ググったんだけど,ググれどもググれども,いい資料が見つからない.最後は,海外のフォーラムをさまよって,やっとわかりやすいサンプルをみつけることができた.(http://blog.ekini.net/2009/04/17/zend-framework-a-simple-zend_rest_server-example/)

以下,http://localhost/zend/123のような感じでアクセスを想定したプログラム.123はidとしてルーティングしてあります.

//indexAction

$params = $this->_getAllParams();
$request = 省略...;

$server = new Zend_Rest_Server();
$server->setClass('XmlServer');
$server->handle($request);

//XmlServer.php
class XmlServer
{
	private $xmlString = '<?xml version="1.0" encoding="UTF-8"?><response></response>';
	public function getById($id)
	{
		$xml = new SimpleXMLElement($this->xmlString);
		//ノード追加処理は省略
		return $xml;
	}
}

受け取ったパラーメタを上のサイトにあるように

Array ( [method] => getById [id] => 123 ) 

のような配列にして$requestを作成.この配列のmethodの部分がsetClassで指定したクラスでよばれることになるようです.さらに,残りのパラメータ(ここでは[id] => 123)の値がそのメソッドの引数として渡されます.受け取る側は,

getById($id)

のようにして受け取ることができます.また,$requestのパラメータが↓こんなかんじで複数あるときは,

Array ( [method] => getById [id] => 123 [name] => hogeo ) 
getById($id, $name)

のようにして受け取ることになります.パラメータの数に合わせて良しなにやってくれるので楽でいいです.存在しないメソッドを呼んだときのエラー処理とかもやってくれます.