フォルダ構成
/
├── api/
│ ├── v1/
│ │ ├── users.php
│ │ └── ...
│ └── ...
├── lib/
│ ├── database.php
│ ├── utils.php
│ └── ...
├── public/
│ ├── index.php
│ └── ...
└── ...
index.php
<?php
require_once 'lib/database.php'; // データベース接続用のライブラリ
require_once 'api/v1/users.php'; // v1 のユーザー API
require_once 'api/v1/posts.php'; // v1 の投稿 API
// HTTP メソッドとパスに対応する API の処理を実行する
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
if (preg_match('/^\/v1\/users\/?$/', $_SERVER['REQUEST_URI'])) {
// GET /v1/users
getUsers();
} else if (preg_match('/^\/v1\/users\/(\d+)\/?$/', $_SERVER['REQUEST_URI'], $matches)) {
// GET /v1/users/{id}
getUser($matches[1]);
} else if (preg_match('/^\/v1\/posts\/?$/', $_SERVER['REQUEST_URI'])) {
// GET /v1/posts
getPosts();
} else if (preg_match('/^\/v1\/posts\/(\d+)\/?$/', $_SERVER['REQUEST_URI'], $matches)) {
// GET /v1/posts/{id}
getPost($matches[1]);
} else {
// 404 Not Found
http_response_code(404);
echo 'Not Found';
}
} else {
// 405 Method Not Allowed
http_response_code(405);
echo 'Method Not Allowed';
}
api/v1/users.php
<?php
function getUsers() {
// ユーザー一覧を取得する処理
// ...
}
function getUser($id) {
// 指定された ID のユーザー情報を取得する処理
// ...
}
api/v1/posts.php
<?php
function getPosts() {
// 投稿一覧を取得する処理
// ...
}
function getPost($id) {
// 指定された ID の投稿情報を取得する処理
// ...
}
このサンプルでは、index.php
で HTTP メソッドとパスに対応する API の処理を実行するようにしています。
api/v1/users.php
では、
ユーザー一覧を取得する getUsers()
と指定された ID のユーザー情報を取得する getUser($id)
を定義しています。
同様に、
api/v1/posts.php
では、投稿一覧を取得する getPosts()
と指定された ID の投稿情報を取得する getPost($id)
を定義しています。
このように、index.php
でパスと処理をマッピングすることで、複数の処理を設定した Web API を実装することができます。