プールからバウチャーを消費するためのシンプルな API サービス アプリケーション。これはデモを目的としており、アーキテクチャとプログラミングのスキルを実証するために作成されました。
以下に主要な設計ポイントと、その処理と実装方法を示します。
Composer は、アプリケーションのすべての依存関係を管理するために使用されます。必要なパッケージ/ライブラリはすべて、 composer.json
ファイルで宣言されます。また、 composer install
コマンドを使用してインストールできます。
アプリケーション エントリはpublic
ディレクトリを指します。このディレクトリには、 index.php
ファイルのみが保持され、パブリックにアクセスできるアセット ファイルも含めることができます。これ以外に、このフォルダーの外にあるコードやファイルには直接アクセスできません。考え方は、このディレクトリの外にあるすべてのファイルを保護することです。
すべてのリクエストとその処理方法は、 routes/api.php
で定義されます。
mySQL と対話するために、「Eloquent」とも呼ばれる Illuminate Database を使用しました。これにより、オブジェクト リレーショナル マッピング「ORM」を介してデータベースと対話できるようになります。
データベースの移行とシードには、フレームワークに依存しないパッケージ Phinx を使用しました。時間の経過とともにアプリケーション コードは進化し、データベースもそれに伴って進化します。コードの変更を追跡するために、git などのソース バージョン管理ツールを使用します。移行スクリプトを使用すると、データベースの変更を追跡することもできます。チーム環境で作業する場合に特に役立ちます。チームメイトが変更をプルするときに、移行スクリプトが表示されていれば、簡単なコマンドでそれを実行するだけで、ローカル データベース スキーマの変更をアップグレードできます。
クラスの依存関係を管理し、依存関係の注入を実行するために、 SlimFramwork Container
使用しました。これにより、アプリケーションからクラスへの依存関係の制御を反転できるため、「制御の反転」パターンになります。
アプリケーションの構成設定を処理するには、Illuminate Config を使用しました。すべての構成はconfig
ディレクトリに保存されます。また、Symfony Dotenv を使用して.env
ファイルに定義された変数をロードし、getenv() 関数を介して変数にアクセスしました。これは、開発、ステージング、運用などの環境ごとに異なる構成設定を行う場合に便利です。
アプリケーション内で何が起こっているかを理解するために、メッセージをログに記録できる堅牢なログ サービスを提供する Monolog ライブラリを使用しました。
アプリケーションの受信 HTTP リクエスト データを検証するために、さまざまな強力な検証ルールを提供する Illuminate Validation を使用しました。
API 応答データの標準的で一貫した出力を提供するために、League Fractal を使用しました。これにより、出力データのプレゼンテーション層と変換層を使用できるようになります。すべての変換クラスはapp/Transformers
ディレクトリに保存されます。
新しい特別オファーが作成されるとき、システム内のすべての受信者に対してバウチャーが生成されるわけではありません。代わりに、HashId を使用して受信者ごとにバウチャーを生成および検証しています。 [{recipient_id}, {offer_id}]
の組み合わせを使用してエンコードおよびデコードできます。常に正確な 8 文字のバウチャー コードが生成されます。このコードはconfig/hashids.php
で更新することもできます。
アプリケーション サービスをテストするために、Codeception を使用しました。これを使用すると、すぐに 3 種類のテスト (単体テスト、機能テスト、受け入れテスト) をすべて統一フレームワークで実行できます。私たちの場合、 AppServices
内のコア ビジネス オブジェクトの単体テストを行い、すべての API エンドポイントの統合と機能をチェックするための受け入れテストも作成しました。すべてのテスト ケースは、 tests
ディレクトリに保存されます。次のコマンドで実行できます。
$ php vendor/bin/codecept run --steps
チーム全体でコーディング標準を維持するために、すべてのコーディング標準が定義されているファイルphpcs.xml
を作成しました。次のコマンドを実行すると、このファイルに従ってすべてのコード ファイルを確認できます。
$ php vendor/bin/phpcs
開発環境の要件:
セットアップ スクリプトを使用してローカル マシンに開発環境をセットアップする(MAC/LINUX の場合) :
git clone https://github.com/ahsanatiq/voucher-pool-api.git
cd voucher-pool-api
./setup.sh
手動セットアップ(Windows の場合) :
git clone https://github.com/ahsanatiq/voucher-pool-api.git
cd voucher-pool-api
cp .env.dev .env
docker-compose up -d
docker exec -it voucher-pool-php-fpm composer install
docker exec -it voucher-pool-mysql mysql -u root -pnewsletter2go -e " create database newsletter2go_testing; GRANT ALL PRIVILEGES ON *.* TO 'newsletter2go'@'%' IDENTIFIED BY 'newsletter2go'; " ;
docker exec -it voucher-pool-php-fpm php vendor/bin/phinx migrate
docker exec -it voucher-pool-php-fpm php vendor/bin/phinx seed:run
これで、http://localhost:8080 経由でアプリケーションにアクセスできるようになります。
PHP-FPM サービス コンテナーで単体テストと受け入れテストを実行します。
docker exec -it voucher-pool-php-fpm php vendor/bin/codecept run --steps
Postman でパブリック API ドキュメントにアクセスできます。すべての API をインポートして実行するには、上部バーの [Run In Postman] をクリックします。インストールしてインポートすると、新しいコレクションが「Newsletter2Go - Voucher API」として表示されます。