現代のWeb開発では、フロントエンドとバックエンドを切り離した「APIベースの開発」が主流となっています。
中でも、RESTful APIはシンプルで分かりやすい設計思想に基づいており、PHPでも簡単に構築できます。
本記事では、RESTの設計原則に始まり、JSON形式でのデータ出力、APIルーティングの構成、さらにAPI認証の基本(APIキー・JWT)について実践的に学びます。

RESTの設計原則とは?
REST(Representational State Transfer)は、リソース(資源)をHTTPメソッドで操作するシンプルな設計ルールです。
RESTの基本ルール
操作 | HTTPメソッド | エンドポイント例 |
---|---|---|
データ取得 | GET | /api/users |
データ追加 | POST | /api/users |
データ更新 | PUT | /api/users/1 |
データ削除 | DELETE | /api/users/1 |
URIは「名詞」、メソッドは「動詞」の役割を持たせるのがRESTfulな設計です。
PHPでJSON形式のAPIレスポンスを返す
APIではHTMLではなく、JSON形式でデータを返すのが一般的です。
<?php
// sample_api.php
header("Content-Type: application/json");
$data = [ "status" => "success", "users" => [ ["id" => 1, "name" => "佐藤"],
["id" => 2, "name" => "田中"] ] ];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?>
header()
でJSONを明示し、json_encode()
で配列をJSONに変換します。
APIルーティングとコントローラー設計
簡易ルーティング例(index.php)
<?php
$request = $_SERVER["REQUEST_URI"];
$method = $_SERVER["REQUEST_METHOD"];
require_once "UserController.php";
if ($request === "/api/users" && $method === "GET") {
UserController::index();
} elseif (preg_match("#^/api/users/(\d+)$#", $request, $matches) && $method === "GET") {
UserController::show($matches[1]);
} else {
http_response_code(404);
echo json_encode(["error" => "Not Found"]);
}
?>
コントローラー例(UserController.php)
<?php
class UserController {
public static function index() {
$users = [ ["id" => 1, "name" => "佐藤"], ["id" => 2, "name" => "田中"] ];
echo json_encode($users);
}
public static function show($id) {
$user = ["id" => $id, "name" => "仮ユーザー"];
echo json_encode($user);
}
}
?>
API認証の基礎|APIキーとJWT入門
① APIキー認証
リクエストヘッダーやURLに「キー」を含めて認証する方式です。
<?php
$valid_key = "my-api-key-123";
$client_key = $_GET["api_key"] ?? "";
if ($client_key !== $valid_key) {
http_response_code(401);
echo json_encode(["error" => "Unauthorized"]);
exit;
}
?>
シンプルですが、HTTPSを前提にしましょう。
② JWT(JSON Web Token)認証(概要)
JWTは、署名付きのトークンでユーザーを識別・認証する仕組みです。
- ログイン時にトークンを発行
- 以後のAPIアクセスではトークンをヘッダーに付与
- トークンの中にユーザー情報や有効期限が含まれる
PHPでは firebase/php-jwt
ライブラリを使用するのが一般的です(Composer経由でインストール)。
// トークン生成例(要:composer require firebase/php-jwt)
use Firebase\JWT\JWT;
$payload = ["user_id" => 1, "exp" => time() + 3600];
$jwt = JWT::encode($payload, "secret-key", "HS256");
echo $jwt;
まとめ
今回は、PHPによるRESTful API開発の基礎を学びました:
- REST設計原則: HTTPメソッドとURI設計
- JSONレスポンス:
json_encode()
でAPI化 - APIルーティングとコントローラー分離
- API認証: APIキー / JWTの基礎
これらをベースに、「SPAアプリとの連携」や「Vue.js/ReactとAPI通信」「LaravelのAPIリソース管理」などにも応用できます。