CakePHP2でJSON/JSONP/XMLのフォーマットを返すプラグイン作りました

CakePHPでWebAPIを作る事が多くて、そんな中とても重宝して使っているプラグインがあります。

josegonzalez / webservice_plugin GitHub

このプラグインをいれて、ちょちょっと設定して、URLの後ろに .json / .xml と追加してアクセスすれば $this->set() した内容がそのまま構造化されて出力されます。かなり便利。超便利。死ぬほど便利。自前で実装しようとすると意外と面倒なので。

と、これそのままでも良かったんですが、突如JSONPにも対応しなくてはならず、フォークして機能追加&特定のバージョンで動かないバグ修正をしました。

zaru / webservice_plugin GitHub

こちらからダウンロード出来ます。josegonzalezさんに感謝。

JSONPでの出力方法

使い方は非常に簡単で、

http://localhost/hoge/index.json?callback=コールバック名

と、callbackキーをGETで指定してあげればJSONP形式で返ってきます。

WebServicePluginの使い方

GitHubのREADMEにも書かれていますが、簡単に使い方を紹介します。

初期設定

app/Config/bootstrap.php

CakePlugin::load('Webservice');

app/Config/routes.php

Router::parseExtensions('json', 'xml');

コントローラの設定

app/Controller/HogeController.php


App::uses('AppController', 'Controller');
class WebController extends AppController {
	public $name = 'Web';
	public $uses = array();
	public $components = array(
		'RequestHandler',
		'Webservice.Webservice'
	);
	
	public function index() {
		$this->set('Items', array('hoge' => 1, 'piyo' => 2));
	}

これで、 http://example.com/web/index.json (or .xml) とアクセスをするとそれぞれのフォーマットで返ってきます。

JSONやXMLでアクセスさせたくないアクションの設定

ブラックリスト機能があります。アクション名を指定することで、そのURLでアクセスされた場合に405ステータスエラーを返します。また、ワイルドカードも使用出来ます。…まぁ使用しないと思いますが。


//...
	public $components = array(
		'RequestHandler',
		'Webservice.Webservice' => array(
			'blacklist' => array('home', 'index')
		)
	);

出力させたくない変数の設定

アクションと同様に、変数自体も出力しないように設定出来ます。CakePHPが自動でセットしてくるような変数を指定してあげましょう(モデルのバリデーション変数とか)。


//...
	public $webserviceBlacklistVars = array(
		'Items'
	);

また、このプラグインCakePHP2.2.x以上?だと、正常に動かなかったので、ちょっとだけ修正してあります。

Feed

最新記事

開発フローを独自進化させ続けている開発チームの話

こんにちは CTO の [@zaru](https://twitter.com/zaru) です。 スクラム開発をしている開発チームが、開発フローを独自進化させていて、それが良い取り組みだったので紹介しようと思います。 #...

235650?v=4
zaru
2017年11月20日

退職者を招いたLTイベントを開催した

こんにちは、ベーシック CTO [@zaru](https://twitter.com/zaru) です。 ベーシック開発部では毎月月末の金曜日にTGIFと称して、 ~~飲み会 + アナログゲームなイベント~~ 技術 LT 大会...

235650?v=4
zaru
2017年10月12日

山形ラボ、TGIFはじめました

こんにちは。株式会社ベーシック山形ラボの長谷川です。 いろんなところで書いたりなんだりしてますが、弊社には山形に「山形ラボ」というリモート拠点がありまして、そこで4人のエンジニアが働いております。 今回は その山形ラボで、...

10917612?v=4
roki1801
2017年10月10日