풀에서 바우처를 소비하는 간단한 API 서비스 애플리케이션입니다. 이는 데모 목적으로 제작되었으며 건축 및 프로그래밍 기술을 보여주기 위해 만들어졌습니다.
다음은 주요 설계 포인트와 이를 처리 및 구현하는 방법입니다.
Composer는 애플리케이션의 모든 종속성을 관리하는 데 사용됩니다. 필요한 모든 패키지/라이브러리는 composer.json
파일에 선언되어 있습니다. composer install
명령을 사용하여 설치할 수 있습니다.
애플리케이션 항목은 index.php
파일만 보유하고 공개적으로 액세스할 수 있는 자산 파일도 포함할 수 있는 public
디렉토리를 가리킵니다. 이 외에는 이 폴더 외부의 코드나 파일에 직접 액세스할 수 없습니다. 아이디어는 이 디렉터리 외부의 모든 파일을 보호하는 것입니다.
모든 요청과 요청 처리 방법은 routes/api.php
에 정의되어 있습니다.
mySQL과 상호작용하기 위해 우리는 "Eloquent"라고도 불리는 Illuminate Database를 사용했습니다. 이를 통해 객체 관계형 매핑 "ORM"을 통해 데이터베이스와 상호 작용할 수 있습니다.
데이터베이스를 마이그레이션하고 시드하기 위해 프레임워크에 구애받지 않는 패키지 Phinx를 사용했습니다. 시간이 지남에 따라 애플리케이션 코드가 발전하고 데이터베이스도 이에 맞춰 발전합니다. 코드 변경 사항을 추적하기 위해 git과 같은 소스 버전 관리 도구를 사용합니다. 마이그레이션 스크립트를 사용하면 데이터베이스 변경 사항을 추적할 수도 있습니다. 팀 환경에서 작업할 때 특히 유용합니다. 팀원이 변경 사항을 가져올 때 마이그레이션 스크립트를 보면 간단한 명령으로 실행하여 로컬 데이터베이스 스키마 변경 사항을 업그레이드할 수 있습니다.
클래스 종속성을 관리하고 종속성 주입을 수행하기 위해 SlimFramwork Container
사용했습니다. 이를 통해 애플리케이션에서 클래스로 종속성 제어를 반전할 수 있으므로 "제어 반전" 패턴이 됩니다.
애플리케이션의 구성 설정을 처리하기 위해 Illuminate Config를 사용했습니다. 모든 구성은 config
디렉터리에 저장됩니다. 또한 Symfony Dotenv를 사용하여 .env
파일에 정의된 변수를 로드한 다음 getenv() 함수를 통해 해당 변수에 액세스합니다. 이는 개발, 스테이징, 프로덕션 등 각 환경에 대해 서로 다른 구성 설정을 갖는 데 유용합니다.
애플리케이션 내에서 무슨 일이 일어나고 있는지 이해하기 위해 메시지를 기록할 수 있는 강력한 로깅 서비스를 제공하는 Monolog 라이브러리를 사용했습니다.
애플리케이션의 수신 HTTP 요청 데이터를 검증하기 위해 다양하고 강력한 검증 규칙을 제공하는 Illuminate 검증을 사용했습니다.
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"로 표시됩니다.