私自身がそうなのですが、OpenAPI仕様書を毎回手作業で書いていて「面倒だな」と思ったことはありませんか?
そんな(私と)あなたにぴったりのツールがあります。

レスポンスの例さえ用意すれば、OpenAPI 3.0 スキーマを自動生成してくれるとしたら?

それが、MockAPI-PHP です。


🧩 MockAPI-PHPとは?

MockAPI-PHPは、PHP 8.3+で動作する軽量ファイルベースのモックAPIサーバーです。
.json.txtファイルだけでREST APIの挙動をシミュレートでき、サーバーやフレームワークは一切不要です。

主な特徴は以下の通りです:

  • 単純なファイル構造で動的レスポンスを定義
  • ポーリングや認証、エラー応答、遅延処理のシミュレーション
  • OpenAPI 3.0 スキーマをレスポンス例から自動生成
  • ブラウザまたはCLI経由でのモックAPI提供(CI/CD統合も可能)

🚀 主な機能

✅ JSON形式のレスポンス定義
✅ パスパラメータ対応(例:/users/{group}/{limit}
✅ クライアントごとのポーリング対応
.envによる簡易認証設定
opis/json-schemaによるスキーマバリデーション
✅ OpenAPIスキーマのYAML/JSON自動生成
✅ CLIツールとPHPビルトインサーバーに対応


🧪 使用例:モックエンドポイントの作成

次のようなエンドポイントをモックしたいとします:

  • GET /products → 商品一覧を返す
  • POST /products → 商品の新規作成
  • PUT /products → 商品の新規または更新
  • PATCH /products/{id} → 商品の一部更新
  • DELETE /products/{id} → 商品の削除
  • 各メソッドにおいて ?mock_response=error を付与 → エラー応答を返す

必要なのは、以下のようなファイル構成です:

responses/
 └── products/
     ├── get/
     │     ├── default.json
     │     └── error.json
     ├── post/
     │     ├── default.json
     │     └── error.json
     ├── put/
     │     ├── default.json
     │     └── error.json
     ├── patch/
     │     └── default.json
     └── delete/
            └── default.json

たとえば、get用のJSONファイルの例:

[
    {
        "id": 1,
        "name": "Product A",
        "description": "Description of Product A",
        "price": 19.99,
        "category": "Electronics",
        "stock": 100,
        "created_at": "2025-04-01T12:00:00Z",
        "updated_at": "2025-04-01T12:00:00Z"
    },
    ...
]

次にサーバーを起動します:

php start_server.php

これで http://localhost:3030/api/products にアクセス可能になります。
GETメソッドなら、ブラウザから直接確認できます。
POSTやPATCHなどは以下のようにCLIからリクエストして確認します:

curl -X POST http://localhost:3030/api/products

📘 注目:OpenAPI 3.0 スキーマを自動生成

そして、これが本題の機能になります。
前項のモックレスポンスからOpenAPI仕様書を生成してみましょう!
次のコマンドで即座に生成できます:

php generate-schema.php yaml "My Awesome API" "1.0.0"

すると schema/openapi.yaml が生成され、SwaggerやStoplight、Postmanでそのまま読み込めます。
さらに、JSONレスポンスが長くなり過ぎないよう、配列データは最初の1件だけをサンプルとして埋め込む最適化もされています。

SwaggerUIで表示すると、以下のようなイメージになります:

SwaggerUI Preview

🛠 活用シーン

  • APIファースト開発(モック → 実装)
  • バックエンド待ちなしでフロントエンド開発
  • 成功・エラー・タイムアウトなど多様な応答テスト
  • スキーマ構造の検証(コントラクトテスト)

🧩 今すぐ試してみよう!


ご覧いただきありがとうございました 🙌
役に立ったと思ったら、GitHubでスターを付けたり、チームにシェアしていただけると嬉しいです。