fuwasegu/dir-json-server

Directory JSON Server

v1.0.0 2024-09-17 01:35 UTC

This package is auto-updated.

Last update: 2024-12-17 02:33:37 UTC


README

静的なディレクトリ構造を JSON Server として公開するためのツールです. 返却したいレスポンスを JSON ファイルとして配置することで, その JSON ファイルを返却する API を簡単に公開することができます.

インストール

composer require --dev fuwasegu/dir-json-server

仕様

contents/ に配置した JSON ファイルを API として公開します.ただし,ルートディレクトリは後述の yaml ファイルで変更可能です. 当該ディレクトリ直下が API のベースパスとなり,その直下に配置した JSON ファイルがそのままレスポンスとなります.

JSON ファイルは,必ず response.json という名前で配置してください.

本ツールは,GET のみをサポートしています.

利用例

コンテンツディレクトリを以下のように配置したとします.

contents/
  users/
    1/
      profile/
        response.json

また,contents/users/1/profile/response.json に以下のような JSON データが配置されていたとします.

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

このとき,GET http://localhost/users/1/profile にアクセスすると,

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

というレスポンスが返却されます.

つまり,

  • contents/ をデフォルトのルートとしてその直下が URL のパスとなる
  • レスポンスにしたいデータを response.json として配置する
  • パスパラメータやクエリパラメータは利用できない
    • パスパラメータは,ディレクトリ名として配置することで実現できる

レスポンス

レスポンスの ContentType について,

  • デフォルトでは application/json となる
  • ルートパスのみ,HTML が返されるため,この場合は text/html となる

サーバーの起動方法

./dir-json serve

利用可能なルートの確認

localhost:8000 にブラウザからアクセスすると,利用可能なルートの一覧が表示されます. こちらは,HTML で表示されます.

ルートは箇条書きに表示され,クリックすることでそのルートにアクセスすることができます.

API レスポンス

基本的に,存在するディレクトリの末端に配置された JSON ファイルがそのままレスポンスとして返却されます. もし,ディレクトリの末端に配置された JSON ファイルが存在しない場合は,ステータスコード 404 が返却されます. また,このとき以下のような json が返却されます.

{
  "status": "error",
  "message": "File not found",
  "path": "contents/users/2/profile/response.json"
}

デフォルトルートディレクトリとポートの設定変更

デフォルトのルートディレクトリとポート番号は、dir-json.yaml ファイルで変更可能です。

root_path: 'contents'
port: 8000

設計

採用技術

  • PHP 8.3
  • Composer

ディレクトリ構造

このプロジェクトは,以下のようなディレクトリ構造を持っています(一部省略)

root/
  contents/
  public/
    index.php
  src/
  composer.json
  • contents/: コンテンツを配置するディレクトリ
  • public/: 公開するディレクトリ. この中に index.php があり,エントリポイントとなります
  • src/: サーバーのコードを配置するディレクトリ
  • composer.json: 依存関係を管理するためのファイル

名前空間

composer.json にて定義されている通り,src/ 配下のファイルは App\ 名前空間配下に配置されます.

アーキテクチャ

このプロジェクトは基本的にクリーンアーキテクチャを採用しています.

本アプリケーションは,DB を使わない代わりに静的なディレクトリ構造を JSON Server として公開するため,インフラ層ではファイルアクセスを行います.