フォルダ構成

/

├── 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 を実装することができます。