CakePHP

【CakePHP2】CakePHP2でjsonpデータを出力するAPIを作成する方法

2019/07/31

CakePHP2で JSON / JSONP を出力する API を作ってみましたので、備忘録としてポストします。
なお、CakePHP のバージョンは 2.4以上 とします。

CakePHP2でJSON / JSONPを出力するAPIを作成する

必要なことは公式サイトに書いていますので、一通り読んでおきましょう。

routes.phpを編集

末尾が hoge.json や api.json のようなURLを有効にするため、app/config/routes.php の任意の行(私は末尾あたりにした)に以下を記述します。

API用のコントローラー「ApisController.php」を作成

今回は分かりやすく、ApisController を作成してみました。
「トピックス」や「よくある質問」用のコントローラーなど、既存のコントローラーへアクションを追記する形でも全く問題ありません。

例として「よくある質問(questionsテーブル)」のデータをjson出力するAPIを作ってみます。
CakePHPでfindして出来上がる配列は以下のような、単純なものとします。

内容のテキストは以下のサービス様のものを拝借しております。

以下、解説。

※1
Model と Component は AppController へ書いておいても良さそうですが、ひとまずこちらへ記述。
RequestHandlerコンポーネントを使用することにより、json と xml が有効となります。

※2
$this->viewClass = 'Json';
を記載すると、通常使われるビューは使わず、(真っ白い画面に)jsonデータだけが出力されるようになります。

※3
参考にしたAPIが response というキー名で帰ってくるので同じようにしているだけで、任意のキー名で問題ありません。

※4
trueに設定すると引数で指定したコールバック関数名でラッピングされ jsonp でも出力できるようになります。
CakePHP2.4以上で有効。

アクセスするURL

  • JSON: http://example.com/apis/faqapi.json
  • JSONP: http://example.com/apis/faqapi.json?callback=hoge

JSONPの場合は、引数「?callback=」に任意のコールバック関数名を指定します。

↑ JSON出力の例

↑ JSONP出力の例(コールバック名:aaa)

参考にしたAPI

-CakePHP
-, , ,