{"id":22007193,"url":"https://github.com/tekku-taro/mini-webapi","last_synced_at":"2025-07-25T22:41:55.708Z","repository":{"id":144672375,"uuid":"234316662","full_name":"tekku-taro/mini-webapi","owner":"tekku-taro","description":"Web api 用のphp製マイクロフレームワーク","archived":false,"fork":false,"pushed_at":"2025-01-08T23:20:18.000Z","size":1577,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-28T13:49:42.252Z","etag":null,"topics":["framework","micro","php","webapi"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tekku-taro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-16T12:37:43.000Z","updated_at":"2021-05-29T09:50:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"a26afa52-e0b0-4443-8e0c-d0e378add8e7","html_url":"https://github.com/tekku-taro/mini-webapi","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tekku-taro%2Fmini-webapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tekku-taro%2Fmini-webapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tekku-taro%2Fmini-webapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tekku-taro%2Fmini-webapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tekku-taro","download_url":"https://codeload.github.com/tekku-taro/mini-webapi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245066676,"owners_count":20555427,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["framework","micro","php","webapi"],"created_at":"2024-11-30T01:18:18.059Z","updated_at":"2025-03-23T07:12:29.691Z","avatar_url":"https://github.com/tekku-taro.png","language":"PHP","readme":"\u003ca href=\"https://opensource.org/licenses/MIT\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-green.svg?style=flat-square\" alt=\"license\"\u003e\u003c/a\u003e\n\n# Mini-WebAPI\n\n## はじめに\n\nこのフレームワークはWeb上に`REST API`を簡単に構築することを目的に開発されたソフトです。\nPHPで作成され、リクエストやリスポンスやデータベースの操作が各クラスで\n予め処理されていますので、開発者はそれぞれのエンドポイントでのロジックを記述する\nだけでAPIサービスを完成させられます。\n\n## REST APIについて\n\nREST APIとは、ウェブアップリケーションの機能を外部から呼び出すためのインターフェースの一種です。\nRESTの原則に従って設計されるため、REST APIあるいはRESTful APIと呼びます。\nREST APIでは、状態管理等を行わず、全てのリクエストがそれ自体で完結した処理を行うこと、URIを通して、全ての情報が一意に表現されていること、リソースの操作には、HTTPメソッド(GET,POST,PUT,DELETE)を利用することなどが定められています。\nリクエストを処理した後、結果データを`json`や`xml`の形式で返し、通信結果をステータスコードで返します。\n\n## 主な特徴\n\n- シンプルで汎用性の高いREST APIを構築できる\n- `JWTトークン`を使った認証用のAPIが予め組み込まれている\n- `Laravelフレームワーク`でも使われている`illuminate/database`ライブラリを利用してモデルクラスで直感的にテーブルデータを操作できる\n- モデルのvalidationルールを簡潔に記述できる\n- APIやモデルクラスの雛形をコマンドラインで作成できる\n\n## サーバー・クライアント間のデータフロー\n\n![JWT認証とリソースの操作](resources/JWT認証とリソースの操作.png?raw=true \"フロー図\")\n\n### 処理の流れ ###\n\n1. クライアントから認証エンドポイント（`SessionsAPI`）に認証情報を送信\n\n   ```json\n   url:hostname/api/sessions\n   method:POST\n   requestBody:{\"name\":\"taro\",\"password\":\"pass\"}\n   ```\n\n   \n\n2. 認証エンドポイントで認証されたら`jwtトークン`を作成して返す\n\n   ```json\n   \"access_token\":ACCESSTOKEN_STRING, \"refresh_token\":REFRESHTOKEN_STRING, \"message\":\"you are ...\"\n   ```\n\n   \n\n3. クライアントはサーバー上のリソースエンドポイント（`ZipcodesAPI`）に向けてリクエストを送信。その際に、`jwtトークン`の中の`アクセストークン`を`Authrization Header`にセットする。\n\n   ```\n   url:hostname/api/zipcodes\n   あるいは\n   url:hostname/api/zipcodes/page/2\t# 2ページ目を指定する場合\n   url:hostname/api/zipcodes/1\t\t    # id=1のレコードを取得したい場合\n   \n   method:GET\n   Authorization:Bearer ACCESSTOKEN_STRING\n   ```\n\n   \n\n4. リソースエンドポイントではリクエストを処理し、結果を`json`データで返す\n\n   ```json\n   \"data\": [\n       {\n           \"id\": 1,\n           \"zipcode\": \"001-0000\",\n           \"address\": \"北海道札幌市北区以下に掲載がない場合\"\n       },\n       ...\n   ],\n   \"count\": 1000,\n   \"message\": \"1000 Zipcode records found\"\n   ```\n\n   \n\n5. レコードを新規作成する場合は、リクエストメソッドを`POST`に変更し、リクエストボディにレコードの`json`データを設定して送信する。その際に、`jwtトークン`の中の`アクセストークン`を`Authrization Header`にセットする。\n\n   ```json\n   url:hostname/api/zipcodes\n   method:POST\n   Authorization:Bearer ACCESSTOKEN_STRING\n   \n   requestBody:{\"zipcode\":\"001-0010\",\"address\":\"北海道札幌市北区北十条西（１～４丁目）\"}\n   ```\n\n   \n\n6. レコードを更新する場合は、リクエストメソッドを`PUT`に変更し、リクエストボディにレコードの`json`データを設定して送信する。その際に、`jwtトークン`の中の`アクセストークン`を`Authrization Header`にセットする。\n\n   ```json\n   url:hostname/api/zipcodes/2\n   method:PUT\n   Authorization:Bearer ACCESSTOKEN_STRING\n   \n   requestBody:{\"id\":2,\"zipcode\":\"001-0010\",\"address\":\"北海道札幌市北区北十条西（１～４丁目）\"}\n   ```\n\n   \n\n7. レコードを削除する場合は、リクエストメソッドを`DELETE`に変更して送信する。その際に、`jwtトークン`の中の`アクセストークン`を`Authrization Header`にセットする。\n\n   ```\n   url:hostname/api/zipcodes\n   method:DELETE\n   Authorization:Bearer ACCESSTOKEN_STRING\n   ```\n\n   \n\n8. `アクセストークン`の期限が切れた時は、認証エンドポイント（`SessionsAPI`）にトークンの更新をリクエスト。その際に、`jwtトークン`の中の`リフレッシュトークン`を`Authrization Header`にセットする。\n\n   ```\n   url:hostname/api/sessions\n   method:PUT\n   Authorization:Bearer REFRESHTOKEN_STRING\n   ```\n\n   \n\n9. 認証エンドポイントでリフレッシュトークンを検証し、認証されたら`jwtトークン`を新たに作成して返す\n\n   ```json\n   \"access_token\":NEW_ACCESSTOKEN, \"refresh_token\":NEW_REFRESHTOKEN, \"message\":\"you are ...\"\n   ```\n\n   \n\n10. セッションを終了する\n\n    ```\n    url:hostname/api/sessions\n    method:DELETE\n    Authorization:Bearer ACCESSTOKEN_STRING\n    ```\n\n    \n\n## エンドポイントと対応するルート・メソッド一覧\n\n- 認証エンドポイント： `hostname/api/sessions`\n  - `POST`：ユーザー認証\n  - `PUT`：トークンの更新\n  - `DELETE`：セッションを終了\n- ユーザー管理：`hostname/api/admin/users`\n  - `GET`：ユーザーリストの取得（ルートにidがあれば＃idのユーザー情報取得）\n  - `POST`：ユーザー新規作成\n  - `PUT`：ユーザー情報更新\n  - `DELETE`：ユーザー情報の削除\n- 一般API：`hostname/api/リソース名(「提供するAPIリスト」に設定された名前)` \n  - `GET`：レコードリストの取得（ルートにidがあれば＃idのレコード取得）\n  - `POST`：レコード新規作成\n  - `PUT`：レコード更新\n  - `DELETE`：レコードの削除\n\n\n\n\n\n## ディレクトリ構造\n\n```\nroot/api\n　├ app\n  │  ├── Api                 # APIクラス\n  │  │    ├── Admin          # 管理者用API\n  │  │    ├── Session        # 認証用API  \n  │  |    └── ...            # 一般APIクラス\n  │  └── Models              # モデルクラス\n  │\n　├ bootstrap                 # システム起動時に呼び出すファイル\n　├ console                   # コマンドライン用機能\n　├ libraries\t\t\t    # アップリケーション用のライブラリ\n　│   ├── AppCore             # コアクラス\n  │   └── ...                 # その他のクラス\n  │\n　├ logs\n　├ resources/\n  ├ route\t\t\t\t\t# リクエスト処理\n　├ tests/\n　├ vendor/   \n　├ .env\t\t\t\t\t\t# 設定ファイル\n　├ .htaccess  \t\t\t\t # アクセスを全てindex.phpにリダイレクト\n　├ index.php\n　├ README.md \n　└ その他のフォルダ・ファイル\n```\n\n## インストール\n\n```bash\n# mini-webapiをウェブサーバー上にクローン\ngit clone https://github.com/tekku-taro/mini-webapi.git\n\n# プロジェクトのディレクトリに移動\ncd mini-webapi\n\n# PHPのパッケージをcomposerでインストール\ncomposer install\n\n# resources/webapi.sqlファイルをデータベースにインポートする\nmysql -u username -p database_name \u003c webapi.sql\n```\n\n## 設定\n\n### 設定ファイル`.env`\n\nプロジェクトフォルダ内の`.env`ファイルをご自分の環境に合わせて変更してください。\n\n```\nAPP_NAME=taro/webapi_fw\n# 開発・運用の切り替え\nAPP_ENV=development    #development/production\n# 接続するデータベースの設定\nDB_DRIVER=mysql\nDB_HOST=127.0.0.1\nDB_NAME=webapi\nDB_USER=root\nDB_PASS=\n# 提供するAPIリスト\nAPI=users,sessions,zipcodes\n# ログの書き出しのOn/Off\nLOG=On # On/Off\n```\n\n\n\n## エンドポイントの追加\n\n例えば、データベースのstaffsテーブルをリソースにして、操作するエンドポイントの場合\n\n1. `staffs`テーブルをデータベースに作成する。\n\n2. `App/Models`フォルダ内に他のモデルクラスを複製するか、後述の雛形作成方法で`Eloquent`を継承した`Staff`クラスを作成する。\n\n3. `App/Api`フォルダ内に他の一般APIクラスを複製するか、後述の雛形作成方法で`StaffsAPI`クラスを作成する。\n\n4. `StaffsAPI`にリクエストメソッドに対応したアクションメソッドを作成し、それぞれに必要な処理を記述する。\n   - `GET` : `getIndex()` または `get()`       # ルートにIDが設定されていれば（cf. api/zipcodes/1） get()に送られる\n   - `POST` : `post()`                                    # レコードの新規作成\n   - `PUT` : `put()`                                        # レコードの更新\n   - `DELETE` : `delete()`                              # レコードの削除\n\n5. 設定ファイル( `.env` )の`API`にAPI名を追加する\n\n   ```\n   # 提供するAPIリスト\n   API=users,sessions,zipcodes,staffs\t# staffsを追加\n   ```\n\n   \n\n### アクションメソッドのパラメータ\n\nリクエストの際に、urlに渡される`GETパラメータ`は、メソッドのパラメータとして取得できます。\n例えば、`url: hostname/api/zipcodes?zipcode=001-0000`ならば\n\n```php\n// ZipcodesAPIクラス内\nfunction get($zipcode)\n{\n    echo $zipcode; // \"001-0000\"\n}\n```\n\n\n\n## テンプレートから雛形を作成する\n\nコマンドラインまたはbashで、`console/maker.bat`あるいは`console/maker.sh`ファイルを実行してAPI/Modelファイルの雛形を`console/output`フォルダ内に作成できます。\n\n### 作成方法\n\n```bash\n# 方法１：maker.batを実行\nconsole/maker.bat make:api ZipcodesAPI\nconsole/maker.bat make:model Zipcode # データベース内にzipcodesというテーブルがあることが前提\nconsole/maker.bat make:api SessionsAPI -m User # [-m modelName] オプションで利用するモデルを変更可\n\n# 方法２：maker.shを実行\nconsole/maker.sh make:api ZipcodesAPI\nconsole/maker.sh make:model Zipcode # データベース内にzipcodesというテーブルがあることが前提\nconsole/maker.sh make:api SessionsAPI -m User # [-m modelName] オプションで利用するモデルを変更可\n\n```\n\n\n\n\n\n## 動作環境\n\n- Apache HTTP Server ( mode_rewrite モジュールを有効化 )\n- PHP 7.2\n- mySql, Maria DB等のPDOで接続できるデータベース\n\n\n\n## ライセンス (License)\n\n**Mini-WebAPI**は[MIT license](https://opensource.org/licenses/MIT)のもとで公開されています。\n**Mini-WebAPI** is open-source software licensed under the [MIT license](https://opensource.org/licenses/MIT).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftekku-taro%2Fmini-webapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftekku-taro%2Fmini-webapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftekku-taro%2Fmini-webapi/lists"}