一個簡單的 API 服務應用程序,用於使用池中的優惠券。這是出於演示目的,旨在展示架構和程式設計技能。
以下是關鍵設計點,以及如何處理和實施。
Composer 用於管理應用程式的所有相依性。所有必需的套件/庫都在composer.json
檔案中聲明。並且可以使用composer install
指令進行安裝。
應用程式入口網站指向public
目錄,該目錄僅包含index.php
文件,並且還可以包含可公開存取的資產文件。除此之外,不能直接存取該資料夾之外的任何程式碼或檔案。這個想法是保護該目錄之外的所有檔案。
所有請求以及如何處理它們都在routes/api.php
中定義。
為了與 mySQL 交互,我們使用了 Illuminate Database 又稱為「Eloquent」。它允許我們透過物件關係來映射「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,開箱即用,它允許我們在統一的框架中進行所有三種類型的測試,即單元測試、功能測試和驗收測試。在我們的例子中,我們對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,請點擊頂部欄上的“在 Postman 中執行”,安裝並匯入後,您將看到新集合為“Newsletter2Go - Voucher API”。