一个简单的 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”。