CakePHP2.x系で外部のAPIを実行する方法

CakePHPを使ってる時に外部のAPIを実行してデータの取得とか登録とかしないといけないことがあったので、その時の実装方法をまとめました。

環境

  • PHP: 5.5.x
  • CakePHP: 2.1.1
  • jQuery: 1.9.1

CakePHPHttpSocketを利用します。

GETリクエストの場合はHttpSocketgetメソッドを、

POSTリクエストの場合はHttpSocketpostメソッドを利用します。

GETリクエストでAPIを実行する場合

// 何かのモデルのリストを取得するAPIのURL
$url = 'http://sample.com/model/list';
// パラメータを設定
$data = array(
    'limit' => 100,
    'conditions' => '検索条件'
);

App::uses('HttpSocket', 'Network/Http');
$HttpSocket = new HttpSocket();
// API実行
$results = $HttpSocket->get($url, array($data));
debug($results);

// jsonが返却された場合は、$results->bodyに対してjson_decode()してあげます
$response = json_decode($results->body);

POSTリクエストでAPIを実行する場合

// 何かのモデルのレコードを追加するAPIのURL
$url = 'http://sample.com/model/add';
// パラメータを設定
$data = array(
    'name' => "name",
);

App::uses('HttpSocket', 'Network/Http');
$HttpSocket = new HttpSocket();
// API実行
$results = $HttpSocket->post($url, $data);
debug($results);

$resultsの中にレスポンスの値が入ります。

最後に

CakePHPHttpSocketを利用することで簡単にAPIを実行することができました。

APIの実装部分を共通クラスにしておくことで、システム内で汎用的に利用できるようにもなります。

URLとパラメータの定義をうまく分離してあげれば共通化は簡単だと思います。