CakePHP

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

2018/10/23

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

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

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

routes.php

hoge.json や api.json なURLを有効にするため、app/config/routes.php の末尾あたりに以下を記述します。

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
-, , ,