2012年2月1日

【CakePHP】でRESTのJSON APIを作成する



ちょっと次のアプリの為にこちらでAPIを作成する必要が出てきました。

ので、APIの作成をAWSで行うことにしました。
サーバサイドはPHPかPerlしか書けないし、
frameworkはcakeしか使えないというダメエンジニアの為、
cakeでREST APIを作成する事にいたしました。

その作成手順をご紹介


まず、RESTとはなにか…とは私も良くわかりませんのでググってください。
HTTP通信のGET/POST/PUT/DELETEによって返す内容を変えるって事と理解しています。

ちなみに、cakeのREST APIは
マニュアル»CakePHPによる作業の定石»REST»単純なセットアップ
ここで解説されております。

まずはroutes.phpの設定
Router::mapResources('controller_name');
Router::parseExtensions();
この2行をroutes.phpへ追加してください。
指定したcontrollerにメソッドを作成していきますが、
後回しにして、viewから作成しましょう。

まず、views/layouts/json/default.ctp
<?php echo $content_for_layout; ?>
layout/json/default.ctpに作成しておりますが、
XMLでAPIを作成したい場合には、layout/xml/default.ctpで作成してください。

次に、view/controller_name/method.ctp
<?php echo json_encode($output); ?>
この1行でJSONをエンコードしてくれます。
$outputへはハッシュか配列、またはその組み合わせを渡せば大丈夫です。

最後にcontrollerですが、ここは必要なメソッドだけ作成すれば良いです。
class ControllersController extends AppController {
  // ...
  function index(){
    $output->error = array(
      array('code' => '101', 'msg' => 'GET method is not supported');
    );
    $this->set('output', $output);
  }
}

これで、example.com/controller.json
でアクセスすると、
{"error":[{"code":101,"msg":"GET method is not supported"}]}
というJSONが取得できます。

REST APIその他のメソッドの対応表についてはcakeのcookbookを参考にしてください。
ちなみに、cookbookのurlは後ろに.xmlや.jsonを付けないとアクセス出来ません。