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