MockAPI-PHP

Tips

カスタムレスポンス

クエリパラメータ mock_response を指定することで、動的にレスポンスを変更できます。

リクエスト 取得されるレスポンスファイル
GET /users responses/users/get/default.json
GET /users?mock_response=success responses/users/get/success.json
POST /users?mock_response=failed responses/users/post/failed.json
POST /users?mock_response=400 responses/users/post/400.json

レスポンスの遅延

JSON ファイル内に mockDelay を設定すると、レスポンスを遅延できます。 responses/users/get/default.json

{
    "id": 1,
    "name": "John Doe",
    "mockDelay": 1000
}

→ 1秒後にレスポンスが返る

クエリパラメータの取り扱い

カスタム Content-Type の設定

デフォルトのレスポンスは application/json もしくは text/plain ですが、任意の Content-Type を指定することも可能です。

CSVファイルを返す場合

レスポンスとして responses/others/get/default.txt を登録(内容は下記参照)。

id,name,email
1,John Doe,john@example.com
2,Jane Doe,jane@example.com

リクエストとして GET others?mock_content_type=text/csv を呼び出すことで others.csv が取得できます(ブラウザ経由であればダウンロードされます)。

XMLファイルを返す場合

レスポンスとして responses/others/get/userlist.txt を登録(内容は下記参照)。

<users>
    <user>
        <id>1</id>
        <name>John Doe</name>
    </user>
    <user>
        <id>2</id>
        <name>Jane Doe</name>
    </user>
</users>

リクエストとして GET others?mock_response=userlist&mock_content_type=application/xml を呼び出すことでXML形式のデータを取得できます。

カスタムフック

特定のメソッド+エンドポイントに対して既定のレスポンスを返す前にカスタム処理をフックさせることができる機能です。 hooks/{メソッド}_{エンドポイントのスネークケース文字列}.php のファイルを設置することで有効化されます。 例: GET users のエンドポイント用カスタムフック hooks/get_users.php

<?php

// 例: GET メソッドでエンドポイントが `/users` の場合にフック
if (isset($request_data['query_params'])) {
    $filter = $request_data['query_params']['filter'] ?? null;
    // クエリパラメータに `filter` が指定されていた場合
    if ($filter) {
        $sort = strtolower($request_data['query_params']['sort']) === 'desc' ? 'desc' : 'asc';
        header('Content-Type: application/json');
        echo json_encode([
            'data' => [
                [
                    'id' => 1,
                    'name' => 'Alice',
                    'age' => 24,
                ],
                [
                    'id' => 2,
                    'name' => 'Bob',
                    'age' => 27,
                ],
            ],
        ]);
        // レスポンスを返したらスクリプトを終了
        exit;
    }
}

GET users?filter=name のクエリパラメータが付与されたリクエストの場合のみ下記のレスポンスが取得できます。

{
  "data": [
    {
      "id": 1,
      "name": "Alice",
      "age": 24
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 27
    }
  ]
}

動的パラメータ

GET users/{group}/{limit} のような動的パラメータを含むエンドポイントへのリクエストについて、 responses/users/get のレスポンスルートでパラメータ部をリクエストパラメータとして取得できます。取得したリクエストパラメータを使用してレスポンスを制御するにはカスタムフックを利用します。 例: GET users のエンドポイント用カスタムフック hooks/get_users.php

<?php

// 例: 動的パラメータのフック `GET /users/{group}/{limit}`
$pattern = '/^dynamicParam\d+$/';
$matchingKeys = preg_grep($pattern, array_keys($request_data));
if (!empty($matchingKeys)) {
    // 動的パラメータの抽出
    $filteredArray = array_filter($request_data, function ($key) use ($pattern) {
        return preg_match($pattern, $key);
    }, ARRAY_FILTER_USE_KEY);
    extract($filteredArray);
    $group = isset($dynamicParam1) ? $dynamicParam1 : 'default';
    $limit = isset($dynamicParam2) ? (int) $dynamicParam2 : 0;

    header('Content-Type: application/json');
    $response = [
        'group' => $group,
        'limit' => $limit,
        'users' => [],
    ];
    for ($i = 1; $i <= $limit; $i++) {
        $response['users'][] = [
            'id' => $i,
            'name' => "User {$i} (Group: {$group})",
        ];
    }
    echo json_encode($response, JSON_PRETTY_PRINT);
    exit;
}

GET users/groupA/3 の動的パラメータを含むリクエストの場合に下記のレスポンスが取得できます。

{
    "group": "groupA",
    "limit": 3,
    "users": [
        {
            "id": 1,
            "name": "User 1 (Group: groupA)"
        },
        {
            "id": 2,
            "name": "User 2 (Group: groupA)"
        },
        {
            "id": 3,
            "name": "User 3 (Group: groupA)"
        }
    ]
}