Swagger、PHPUnit、その他の便利なユーティリティがバンドルされたフライト マイクロ フレームワーク。基本的なプロジェクト設定、テストルートとモデル、単体テスト用のテンプレートを含めることにより、前述のツールで構築された API の開発を開始できるように設計されています。
このガイドは、プロジェクトで次のテクノロジを現在使用している (または使用する予定がある) ことを前提としています。
PHP 7.1+
作曲家
Xdebug (PHPUnit を使用する場合は必須)
まず、PHP 7.1 以降を使用して実行中の Web サーバー (Apache など) をインストールおよび構成していることを確認します。
composer
を使用してプロジェクトのスケルトンをダウンロードし、必要な依存関係をすべてインストールし、サンプル単体テストを実行します。
composer create-project tribeos/flight-php-swagger path/to/project
Flight が機能するには Apache 2 のmod_rewrite
モジュールに依存しているため、まずa2enmod
経由で有効にしてからサーバーを再起動する必要があります。
sudo a2enmod rewrite
sudo systemctl restart apache2
その後、Apache のデフォルト設定ファイルも編集する必要があります。これは、書き換えルールを適用するために.htaccess
ファイルを使用することが最初は禁止されているためです。設定ファイルは通常、 /etc/apache2/apache2.conf
にあります。その中で、ディレクトリ/var/www
を参照するブロックを見つけて、 AllowOverride
がAll
に設定されていること、およびRequire all granted
ことを確認します。
<ディレクトリ /var/www/>オプション インデックス FollowSymLinksAllowOverride AllRequire すべて許可 </ディレクトリ>
変更を保存した後、Apache サーバーを再起動します。
複数のサイト構成がある場合、または複数のサイト構成が必要な場合は、 /etc/apache2/sites-available
内の目的の構成ファイルを編集することで、サイトごとに書き換えルールを有効にすることもできます。詳細については、次のチュートリアルを参照してください。
注: 前述の手順は、Ubuntu ディストリビューションを使用していることを前提としています。別のオペレーティング システムを使用している場合は、書き換えモジュールの有効化に関する適切なチュートリアルを参照してください。
Windows (WAMP/XAMPP)
CentOS
プロジェクトとその依存関係には、特定の PHP 拡張機能がインストールされている必要があります。不足している可能性がある一般的な拡張機能は、次のようなものである可能性があります。
問題 | 解決 |
---|---|
mbstring | sudo apt install php-mbstring |
zip およびunzip 関連の問題 | sudo apt install zip unzip php-zip |
注: 前の Apache 2 セクションと同様に、これらの手順は Ubuntu ディストリビューションに関連しています。別のオペレーティング システムを使用している場合は、適切な代替コマンドを参照してください。
インストールが完了すると、プロジェクト内に次の構造が表示されます。
path/to/project ├── app │ ├── models │ │ └── SampleModel.php │ ├── routes │ │ ├── FlightSetup.php │ │ └── SampleRoute.php │ └── utils │ └── Validator.php ├── config │ ├── config.php │ └── config.sample.php ├── docs ├── logs │ └── .htaccess ├── tests │ ├── build │ └── unit │ └── SampleTest.php ├── vendor ├── .gitignore ├── .htaccess ├── autoload.php ├── composer.json ├── composer.lock ├── index.php ├── LICENSE ├── phpunit.xml └── README.md
プロジェクトの主要コンポーネントの概要:
app
: メインアプリケーションフォルダー
models
: リクエスト/レスポンスに使用されるモデル
routes
: API ルートの定義
utils
: バリデータやロガーなどのアプリケーションユーティリティ
config
: 設定ファイル
docs
: Swagger ドキュメント ファイル
logs
: ログストレージ
tests
: アプリケーション テスト フォルダー
build
: フォームテスト (コードカバレッジなど) の結果として得られるコンパイル済みファイル
src
: テストソースファイル
vendor
: すべてのライブラリとサードパーティ コードの場所
autoload.php
: Composer の依存関係をロードし、他のすべてのプロジェクト ファイルを含むブートストラップ ファイル
index.php
: API エントリ ポイント
phpunit.xml
: PHPUnit テスト構成
プロジェクト (および Swagger ドキュメント) に関連するすべての主要な設定は、 config/config.php
ファイル内で処理されます。プロジェクトのニーズに応じて構成定数を変更/追加します。
もう 1 つの重要なファイルは、API エントリ ポイントとして機能するindex.php
です。ファイルautoload.php
が必要です。このファイルには、Composer の依存関係をロードするコードと、その他すべての必要なプロジェクト ファイルが含まれています。さらに、Flight フレームワークを開始します。デフォルトでインポートされるファイルは、すべてのmodels
、 routes
、 utils
に加え、プロジェクト構成ファイル ( config/config.php
)、Swagger-PHP 構成ファイル ( docs/swagger.php
)、および Composer のvendor/autoload.php
です。プロジェクトのニーズに応じて、インポートするファイルを変更/追加します。
Flight は、RESTful Web API を迅速に作成できる、拡張可能で使いやすい PHP フレームワークです。これにより、ミドルウェア機能やカスタム メソッドをオーバーライド/作成する機能と組み合わせて、詳細で機能的な API エンドポイントを作成できます。
Flight::route('GET /sample/@value', function($value) { Flight::json([ 'sample_value' => $value ]); });
プロジェクト内のすべてのルーティングは Flight 経由で行われます。初期のフライト設定 ( FlightSetup.php
) とすべてのプロジェクト ルートは、 routes
フォルダー内で処理され、ニーズに合わせて変更できます。
Flight に関する広範な使用法ドキュメントと例は、Flight ホームページの「学習」エリアで入手できます。 Flight フレームワーク自体の詳細については、その GitHub リポジトリにアクセスしてください。
routes
フォルダーにルートを作成したら、RESTful API の OpenAPI ドキュメントの作成と生成を開始できます。
ドキュメントは、対応するルートの上にあるDocBlocks (別名 PHP コメント ブロック) 内に書き込まれます。
/** * @OAGet( * path="/sample/route", * tags={"sample"}, * summary="サンプル ルート。", * @OAResponse( * response=200, * description="Aサンプル応答。" * ), * security={ * {"api_key": {}} * } * )*/
すべての RESTful エンドポイントに対して、パス、タグ、短い概要、パラメータ、デフォルトのパラメータ値、リクエスト本文、利用可能なレスポンス、セキュリティ認証、およびその他の多数のオプションを定義できます。
プロジェクト名、プロジェクト作成者、API サーバー URL、仕様フォルダーなどの一般的な Swagger 構成は、 config/config.php
の「Swager 構成定数」領域にあり、構成できます。
プロジェクトのスケルトンには、Swagger ドキュメントに必要なすべてのファイル (PHP セットアップ ファイル、HTML および CSS) が含まれるdocs
フォルダーが付属しています。ドキュメントにアクセスするには、ブラウザーでプロジェクトのルート ルート ( /
) に移動します。
Swagger 全般および OpenAPI 標準の詳細については、Swagger の公式ホームページを参照してください。 PHP 実装に関する広範な使用法ドキュメントと例は、swagger-php 公式ホームページで入手できます。
このプロジェクトには、HTTP リクエスト、レスポンス、エラー ロガーである http-logger がバンドルされており、(デフォルトでは) すべての受信リクエストとそれに対応するレスポンスをタブ区切り値 (TSV) としてlogs/debug.log
に記録します。ロガーの詳細情報と構成の詳細については、GitHub ページを参照してください。
ロガーにはログ ファイルの場所が必要です (デフォルトでは、 config/config.php
の定数によって設定されます)。さらに、ロガーの機能を最大限に活用するには、Flight の内部エラー ハンドラーを無効にする必要があります (有効にすると、http-logger の前に特定の種類のエラーが捕捉されます)。
/* FlightPHP の内部エラー ロガーを無効にします。 */Flight::set('flight.handle_errors', false); HttpLogger::create('file', 'full+h', LOG_FILE, false);/* ロガーを取得して使用します */$logger = HttpLogger::get();$logger->log();
ロガーは、 routes/FlightSetup.php
を介して組み込まれ、フライト ミドルウェア関数Flight::after()
内に構成されます。この関数は、すべてのリクエストの後に実行されます (そのため、適切な応答を取得できます)。開示に応じて、ロガーの機能と監視するルートを変更できます。
Flight::output()
Flight::output()
はFlight::json()
(JSON 応答出力) の機能とカスタム HTTP Logger を組み合わせたカスタム マップされたメソッドです。このメソッド経由で送信される API 応答は、ロガーで設定された設定に従って自動的に記録されます。 このメソッドは、 routes/FlightSetup.php
で定義および構成されます。
これは、Flight ミドルウェアを使用してインターセプトせずに、リクエスト/レスポンスのペアのログ機能が必要な場合に便利です。
Flight::output()
送信される実際のデータ (必須) と応答コード (オプション、デフォルトでは 200) の 2 つのパラメーターを取ります。
Flight::output(['sample_message' => 'サンプル応答。'], 301);
Flight::validate()
Flight::validate()
Swagger-PHP 分析を使用して、渡されたリクエスト本文が、予期される OpenAPI モデル仕様に従って有効である (すべての必須属性を含む) かどうかを判断します。
すべてのモデルはクラスとして宣言され、その属性は public に設定されます。モデルはapp/models
で定義され、次の構造に従います。
/** * @OASchema( * ) */class SampleModel {/** * @OAProperty( * description="リクエストボディのサンプル属性。", * example="サンプル文字列。" * required=true * ) * @ var string */public $sample_attribute; }
この具体的な例では、 description
モデルのプロパティの概要を説明するために使用され、 required
プロパティが必須かどうかを決定し、 example
プロパティにデフォルト値を割り当てます。モデル スキーマの詳細については、Swagger-PHP のドキュメントを参照してください。
モデルバリデータクラスはutils/Validator.php
で宣言および定義され、カスタムマップされた Flight メソッドとしてroutes/FlightSetup.php
に含まれます。これは 2 つのパラメーターを取ります。リクエスト本文が検証されるクラスとリクエスト本文自体です。
Flight::validate(SampleModel::class, Flight::request()->data->getData());
このメソッドは、追加のメソッドが呼び出される前に、API ルート内で呼び出される必要があります。モデルが有効な場合、リクエストは実行を続行します。モデルが検証に失敗した場合、 400 Bad Request
応答コードが出力され、リクエストが終了します。
注: Flight::validate()
Flight::output()
に依存するため、プロジェクトからカスタム出力メソッドを削除する予定がある場合は、必要に応じてバリデーターがマップされたメソッドを書き直す必要があります。
このプロジェクトには、PHP のテスト フレームワークである PHPUnit が付属しており、それ自体のテストに加えて、コード カバレッジの生成も可能です。
PHPUnit を使用したテストに関連するすべての設定はphpunit.xml
にあります。セットアップにはいくつかのオプションが使用できます。
テスト ファイルの場所testsuites
タグ内で、テストのためにスキャンされる場所を定義できます。デフォルトでは、これはtests/unit
です。テスト ディレクトリが ( directory
タグ経由で) 定義されると、テスト実行中にテスト ファイルがアルファベット順に実行されます。必要に応じて、 file
タグを使用してカスタム オーダーでテスト ファイルを定義することもできます。
<テストスイート> <testsuite name="サンプル-テストスイート"> <directory suffix="Test.php">tests/src/</directory><!-- デフォルトでは、テスト ファイルはアルファベット順のファイル順序で実行されます。特定の実行順序を設定する場合は、個別のテスト ファイルを定義します --><!-- <file>tests/src/SampleTest.php</file> --></testsuite> </テストスイート>
テスト カバレッジ レポートの種類 テストの実行後に、さまざまな種類のテスト レポートを生成できます。ログの種類はlogging
タグで定義されます。コンパイルされたすべてのテスト ファイルは、デフォルトでは、 tests/build
内に配置されます。
<logging><!-- テスト ログの種類 --><log type="testdox-html" target="tests/build/testdox.html"/> <log type="tap" target="tests/build/report.tap"/> <log type="junit" target="tests/build/report.junit.xml"/> <log type="coverage-html" target="tests/build/coverage"/> <log type="coverage-text" target="tests/build/coverage.txt"/> <log type="coverage-clover" target="tests/build/logs/clover.xml"/> </ロギング>
コード カバレッジ レポートに含める/除外するファイル コード カバレッジ レポートに含める (またはコード カバレッジ レポートから除外する) ファイルを選択することもできます。これは、 whitelist
タグ内のfilter
タグを通じて行われます。デフォルトでは、プロジェクトの PHPUnit セットアップは、 models
とroutes
を除くapp
ディレクトリ内のファイルをカバーします (これらのフォルダーにはコード カバレッジを効果的にテストできるコードが含まれていないため)。カスタムの包含/除外フォルダーおよびファイルを定義することもできます。
<フィルター> <whitelist><!-- コード カバレッジに使用するフォルダーの名前 --><directory suffix=".php">app/</directory> <exclude><!-- コード カバレッジから除外されるファイル/フォルダー (テスト可能なメソッドのない PHP ファイル)。プロジェクトのニーズに応じて編集します。 --><directory suffix=".php">app/models</directory> <directory suffix=".php">app/routes</directory> </除外> </ホワイトリスト> </フィルター>
すべての単体テストは、デフォルトで、 tests/unit
ディレクトリ内に書き込む必要があります。テスト ファイル名は、 ( phpunit.xml
で定義されているように) PHPUnit で検出できるように、 Test.php
で終わる必要があります (例: SampleTest.php
)。
テスト クラスはTestCase
クラスを拡張して定義され、さまざまなテスト メソッドを含めることができます。テストに名前を付けるときは、 test
+ キャメル ケースでのテストの説明 (例: testThisIsASampleTest
) という規則を使用できます。これにより、テスト実行中にテスト ケース名を説明文に変換できるようになり、テストで何を行うべきかについて開発者に追加の概要が提供されます。
/* testing/unit/SampleTest.php */<?phpuse PHPUnitFrameworkTestCase;class SampleTest extends TestCase {public function testThisIsASampleTest() {$this->assertTrue(true); } }
すべてのテストを実行するには、プロジェクトのルート ディレクトリ内でvendor/bin/phpunit --testdox
を実行します。
root@ubuntu:/path/to/project$vendor/bin/phpunit --testdox PHPUnit 7.5.16、Sebastian Bergmann および寄稿者による。 サンプル これはサンプルテストです
単一のテスト ファイルのみを実行するには、そのパスを指定します: vendor/bin/phpunit --testdox tests/unit/SampleTest.php
--testdox
フラグはオプションですが、(上記のセクションで説明したように) 名前に基づいてテストに関する説明文を生成し、テスト内で何が起こっているかを理解しやすくするため、推奨されます。
テストの実行後、コード カバレッジ レポートがtests/build/coverage
ディレクトリ内に生成され、ブラウザでこのパスを開くと表示できます。
Aldin Kovačević 、スケルトンとドキュメントに関する初期作業- Aldin-SXR
スケルトンは MIT ライセンスに基づいてライセンスされています。詳細については、LICENSE ファイルを参照してください。
作業中です。