サーバーサイドのPHPで、ブラウザ等のクライアントからHTTPリクエストを受けて処理する方法です。
リクエストURLの取得
クライアントからリクエストされたURLは以下のように取得します。
if(isset($_SERVER['REQUEST_URI'])){
// Apacheの場合
$original_url = $_SERVER['REQUEST_URI'];
}elseif(isset($_SERVER['HTTP_X_ORIGINAL_URL'])){
// IISの場合
$original_url = $_SERVER['HTTP_X_ORIGINAL_URL'];
}else{
// 取得できなかった
}
リクエストAPIの取得
クライアントからリクエストされたURLの内、どのようなAPIをリクエストされたかを取得します。
例として、ここでは「http://ip:port/api/functions」というURLがリクエストされるとします。
“api”は共通の識別子、”functions”が実行してほしい各種API機能名とします。
preg_match('/api\/([a-zA-Z0-9\/\-]+)/', $original_url, $api);
$request_api_function = $api[1]; // functionsを抽出
if(!isset($request_api_function)){
// 取得できなかった
}
POST/GET/PUT/DELETEのディスパッチ
クライアントからリクエストされたAPIがPOST/GET/PUT/DELETEの内どれなのかを判断し、ディスパッチします。
リクエストデータは、POST/PUT時はJSON形式、GET/DELETE時はクエリストリングで通知され、内部ではいずれもJSON形式でハンドリングする例を記載します。
$get = $_GET;
$stdin = file_get_contents('php://input');
if(is_string($stdin) && is_array(json_decode($stdin, true)) && (json_last_error() == JSON_ERROR_NONE)){
$request_json = $stdin; // POST/PUT時のリクエストデータ(JSON形式)
}
switch($_SERVER['REQUEST_METHOD']){
case 'POST':
// リクエストデータは$request_jsonから取得
// POSTの処理
break;
case 'GET':
if(isset($get['hoge_string'])){
$request_json["hoge_string"] = $get['hoge_string']; // キー'hoge_string'の値(文字列)を取得
}
if(isset($get['hoge_number'])){
$request_json["hoge_number"] = intval($get['hoge_number']); // キー'hoge_number'の値(数値)を取得
}
// これでPOST/PUTと同様の$request_jsonができる
// GETの処理
break;
case 'PUT':
// リクエストデータは$request_jsonから取得
// PUTの処理
break;
case 'DELETE':
if(isset($get['hoge_string'])){
$request_json["hoge_string"] = $get['hoge_string']; // キー'hoge_string'の値(文字列)を取得
}
if(isset($get['hoge_number'])){
$request_json["hoge_number"] = intval($get['hoge_number']); // キー'hoge_number'の値(数値)を取得
}
// これでPOST/PUTと同様の$request_jsonができる
// DELETEの
break;
default:
}
コメント