[CakePHP]CakePHP 2.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 とパラメータの定義をうまく分離してあげれば共通化は簡単だと思います。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です