CakePHP 3
を使用して外部のAPIを利用する際の実装方法をまとめました。
2系の時とは実装方法が異なるので、2系でAPIの実装したことがある人は注意が必要です。
実行環境
- PHP : 7.1.0
- CakePHP : 3.5.X
GET リクエストで API を実行する場合
Controller
に下記の action
を追加します。
今回は郵便番号から住所を取得する外部 API を利用します。
Controller
の先頭部分に Client
をインポートしておきます。
use Cake\Network\Http\Client;
public function searchAddress() {
$url = 'http://zipcloud.ibsnet.co.jp/api/search';
$data = [
'zipcode' => $this->request->getQuery('郵便番号')
];
$http = new Client();
$response = $http->get($url, $data);
$body = json_decode($response->body());
$results = [];
if ($body->status == 200 && $body->message == null && $body->results != null) {
foreach ($body->results as $result) {
$tmp = [
'郵便番号' => $result->zipcode,
'都道府県コード' => $result->prefcode,
'住所1' => $result->address1,
'住所2' => $result->address2,
'住所3' => $result->address3,
'住所かな1' => $result->kana1,
'住所かな2' => $result->kana2,
'住所かな3' => $result->kana3
];
array_push($results, $tmp);
}
} else {
$this->response->body(json_encode($body->message));
}
$this->set(compact('results'));
$this->set('_serialize', ['results']);
}
試しに上記の実装した URL に郵便番号のパラメータとして「100-0001」を設定して、 GET
リクエストを実行すると、下記のレスポンスが返ってきます。
array(1) {
[0]=>
array(8) {
["郵便番号"]=>
string(7) "1000001"
["都道府県コード"]=>
string(2) "13"
["住所1"]=>
string(9) "東京都"
["住所2"]=>
string(12) "千代田区"
["住所3"]=>
string(9) "千代田"
["住所かな1"]=>
string(18) "トウキョウト"
["住所かな2"]=>
string(15) "チヨダク"
["住所かな3"]=>
string(12) "チヨダ"
}
}
最後に
CakePHP3
の HttpClient
を利用することで簡単に API
を実行することができました。
API の実装部分を共通クラスにしておけば、システム内で汎用的に利用できるようにもなります。
コメント