[CakePHP]CakePHP 3.x系で外部の API を実行する方法

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) "チヨダ"
  }
}

最後に

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

コメントする

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