組み込み制御やC言語での開発経験がある方向けに、フレームワークを使わずにPure PHP 1ファイルで構築する最小限のWeb APIサンプルコードを解説します。
Web APIの仕組みは、C言語における「ソケット通信を通じて特定のフォーマット(JSON)でパケットを受信し、処理結果を返送する処理」と非常に近いです。まずは最小構成からコードとレスポンスの挙動を確認していきましょう。
1. 最小限のAPIコード (api.php)
以下のコードは、GET/POSTリクエストの受け取り、JSONデコード・エンコード、およびエラーハンドリングを含んだ最小限のAPI実装例です。
PHP
<?php
// 1. レスポンスのHTTPヘッダーを設定
header('Content-Type: application/json; charset=utf-8');
// 2. HTTPメソッドの取得
$method = $_SERVER['REQUEST_METHOD'];
// 3. GETリクエストの処理(クエリパラメータの取得)
if ($method === 'GET') {
// $_GET はURLパラメータ(?name=xxx)を格納した連想配列
$name = $_GET['name'] ?? 'Guest';
$response = [
'status' => 'ok',
'message' => 'Hello, ' . $name
];
}
// 4. POSTリクエストの処理(送信されたJSONボディの解析)
elseif ($method === 'POST') {
// 生のリクエストボディ(バイト列)を読み込む
$rawInput = file_get_contents('php://input');
// JSON文字列をPHPの連想配列にデコード
$data = json_decode($rawInput, true);
// JSONデコード失敗(構文エラー等)のチェック
if (json_last_error() !== JSON_ERROR_NONE) {
http_response_code(400); // 400 Bad Request
$response = ['error' => 'Invalid JSON input'];
} else {
$response = [
'status' => 'ok',
'received' => $data
];
}
}
// 5. サポート外のメソッドへのエラー返却
else {
http_response_code(405); // 405 Method Not Allowed
$response = ['error' => 'Method Not Allowed'];
}
// 6. 連想配列をJSON文字列に変換して出力(クライアントへ送信)
echo json_encode($response, JSON_UNESCAPED_UNICODE);2. C言語経験者が押さえるべきポイント
php://input(生データの取得)file_get_contents('php://input')は、HTTPリクエストのボディ部分をそのまま文字列として読み込みます。
C言語でソケットバッファ(char buffer[])からデータを受信する操作に対応します。json_encode/json_decode
PHPの連想配列とJSON文字列の相互変換を行う標準関数です。
C言語のように手動で文字列整形(sprintf等)を行ったりパーサーを書く必要はありません。- メモリと状態の管理
PHPは1リクエストごとにスクリプトが起動・終了するステートレスな構造です。malloc/freeのような動的メモリ管理を意識する必要はありません。
3. 各状態におけるレスポンスヘッダーと出力例
curl -i コマンドでリクエストを送信した際の、実際の生のHTTPレスポンス(ヘッダー+ボディ)の出力例です。
① GET リクエスト成功(200 OK)
実行コマンド:
Bash
curl -i "http://localhost:8000/api.php?name=Taro"レスポンス例:
HTTP
HTTP/1.1 200 OK
Host: localhost:8000
Date: Mon, 17 Aug 2026 10:00:00 GMT
Connection: close
X-Powered-By: PHP/8.x.x
Content-Type: application/json; charset=utf-8
{"status":"ok","message":"Hello, Taro"}② POST リクエスト成功(200 OK)
実行コマンド:
Bash
curl -i -X POST "http://localhost:8000/api.php" \
-H "Content-Type: application/json" \
-d '{"sensor_id": 101, "value": 23.5}'レスポンス例:
HTTP
HTTP/1.1 200 OK
Host: localhost:8000
Date: Mon, 17 Aug 2026 10:00:05 GMT
Connection: close
X-Powered-By: PHP/8.x.x
Content-Type: application/json; charset=utf-8
{"status":"ok","received":{"sensor_id":101,"value":23.5}}③ 不正なJSONデータの送信(400 Bad Request)
構文エラー(文末の余分なカンマなど)を含むJSONを送信した場合の動作です。
実行コマンド:
Bash
curl -i -X POST "http://localhost:8000/api.php" \
-H "Content-Type: application/json" \
-d '{"sensor_id": 101,}'レスポンス例:
HTTP
HTTP/1.1 400 Bad Request
Host: localhost:8000
Date: Mon, 17 Aug 2026 10:00:10 GMT
Connection: close
X-Powered-By: PHP/8.x.x
Content-Type: application/json; charset=utf-8
{"error":"Invalid JSON input"}④ サポート外メソッドでのアクセス(405 Method Not Allowed)
DELETE や PUT など、処理を定義していないメソッドでアクセスした場合です。
実行コマンド:
Bash
curl -i -X DELETE "http://localhost:8000/api.php"レスポンス例:
HTTP
HTTP/1.1 405 Method Not Allowed
Host: localhost:8000
Date: Mon, 17 Aug 2026 10:00:15 GMT
Connection: close
X-Powered-By: PHP/8.x.x
Content-Type: application/json; charset=utf-8
{"error":"Method Not Allowed"}4. 動作確認手順(ローカル環境)
PHP組み込みのWebサーバー機能を使うことで、ApacheやNginxを構築せずに即座にローカル環境でテストできます。
- ターミナルで
api.phpを保存したディレクトリへ移動 - サーバーを起動:
Bashphp -S localhost:8000 - 別のターミナルから上記の
curlコマンドを実行して挙動を確認



コメント