PHPで組んだシステムからAPIをぶっ叩いて外部サイトとあれやこれややり取り出来る機能を追加してほしいというお題をもらったので、cURLを利用して外部APIを叩く勉強をした。
そのときの備忘録
#目的
社内チャットにchatworkを使用しているので、社内システムから業務に必要な申請があった時、管理者にchatworkへ「申請があったよ」ってタスクを登録してあげたりする機能を追加したい。
##cURLの使い方
###基本
$url = "叩きたいAPIのURL";
$ch = curl_init(); //初期化
###オプション設定
curl_setopt($ch, CURLOPT_URL, $url); //URLの指定
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //返り値が欲しい
###実行
$response = curl_exec($ch);
curl_close($ch); //終了
基本的にはこんなところ。
あとはやりたい動作毎にメソッドを指定してあげる。
###GETメソッド
APIを叩いてデータを取得したい場合。ユーザー情報とかroomIDとか。
特に設定は必要なく、上記の基本部分だけの記述でOK。
###POSTメソッド
何かしらのデータ登録的な処理を行ってほしい時。メッセージの投稿やタスクの設定など。
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
まずPOST処理をしたいことを設定。
その後、設定するためのパラメータを配列形式で指定する。設定する内容は行いたい処理によって様々なので、使いたいAPIのドキュメントを参照して設定する。
今回の場合だと、タスク登録時に発行されるタスクIDが後々の処理で必要になるので、POSTの場合でも返り値を受け取る設定をしておいた。
###PUTメソッド
変更などの処理を行ってほしい場合。今回だと、タスクステータスの自動変更など。
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
POSTメソッドとは、メソッドの指定の仕方が違う。
オプションにCURLOPT_PUTがあったので、これを指定すれば動きそうと思ったら動かなくて、上記の方法でPUTメソッドと指定してあげないとダメ。
ついにで今回はPOSTもPUTも記述を統一したので気にしてなかったが、PUTする場合はパラメータもhttp_build_queryで変換してあげないとダメらしい。
POST時に返り値で貰えるタスクIDがあれば、そのタスクIDをURLの中で指定し、タスクのパラメータをAPIで自動的に切り替える機能も盛り込むことが出来た。
あとはDELETEメソッドもあるが、今回は使用しなかったのでここでは割愛。
とりあえず、これらの方法で無事外部サービスとの連携機能を実装することが出来た。