CakePHP
を使ってる時に外部のAPIを実行してデータの取得とか登録とかしないといけないことがあったので、その時の実装方法をまとめました。
環境
- PHP: 5.5.x
- CakePHP: 2.1.1
- jQuery: 1.9.1
CakePHP
のHttpSocket
を利用します。
GET
リクエストの場合はHttpSocket
のget
メソッドを、
POST
リクエストの場合はHttpSocket
のpost
メソッドを利用します。
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
の中にレスポンスの値が入ります。
最後に
CakePHP
のHttpSocket
を利用することで簡単にAPIを実行することができました。
APIの実装部分を共通クラスにしておくことで、システム内で汎用的に利用できるようにもなります。
URLとパラメータの定義をうまく分離してあげれば共通化は簡単だと思います。
コメント