Una sencilla aplicación de servicio API para consumir vales del grupo. Esto es para fines de demostración y se creó para demostrar habilidades de arquitectura y programación.
A continuación se detallan los puntos clave del diseño y cómo se han manejado e implementado.
Composer se utiliza para gestionar todas las dependencias de la aplicación. Todos los paquetes/bibliotecas necesarios se declaran en el archivo composer.json
. Y se puede instalar usando el comando composer install
.
La entrada de la aplicación apunta al directorio public
, que contiene solo el archivo index.php
y también puede tener archivos de activos a los que se puede acceder públicamente. Aparte de esto, no se puede acceder directamente a ningún código o archivo fuera de esta carpeta. La idea es proteger todos los archivos fuera de este directorio.
Todas las solicitudes y cómo deben manejarse se definen en routes/api.php
.
Para interactuar con MySQL, hemos utilizado Illuminate Database, también conocido como "Eloquent". Nos permite interactuar con nuestra base de datos a través del Mapeo Relacional de Objetos "ORM".
Para migrar y inicializar la base de datos, hemos utilizado el paquete Phinx independiente del marco. Con el tiempo, el código de la aplicación evoluciona y la base de datos también evoluciona con él. Para realizar un seguimiento de los cambios de código utilizamos herramientas de control de versiones de código fuente como git. Con los scripts de migración también podemos realizar un seguimiento de los cambios en la base de datos. Especialmente útil cuando se trabaja en un ambiente de equipo. Cuando los compañeros de equipo realizan sus cambios, si ven los scripts de migración, simplemente pueden ejecutarlos con el simple comando para actualizar los cambios en el esquema de su base de datos local.
Para gestionar las dependencias de clases y realizar la inyección de dependencias, hemos utilizado SlimFramwork Container
. Con esto podemos invertir el control de dependencias de la aplicación a la clase de ahí el patrón "Inversión de Control".
Para manejar los ajustes de configuración de la aplicación, hemos utilizado Illuminate Config. Todas las configuraciones se almacenan en el directorio config
. También usé Symfony Dotenv para cargar las variables definidas en el archivo .env
y luego acceder a ellas a través de la función getenv(). Esto es útil para tener diferentes ajustes de configuración para cada entorno, es decir, desarrollo, preparación y producción.
Para comprender lo que sucede dentro de nuestra aplicación, hemos utilizado la biblioteca Monolog, que proporciona servicios de registro sólidos que le permiten registrar mensajes.
Para validar los datos de solicitud HTTP entrantes de su aplicación, hemos utilizado Illuminate Validation, que proporciona una variedad de poderosas reglas de validación.
Para proporcionar una salida estándar y consistente de datos de respuesta de API, hemos utilizado League Fractal, de modo que podamos tener una capa de presentación y transformación para nuestros datos de salida. Todas las clases de transformación se almacenan en el directorio app/Transformers
.
Cuando se crea una nueva oferta especial, no generamos vales para todos los destinatarios en nuestro sistema. En lugar de eso, utilizamos HashIds para generar y validar cupones para cada destinatario. Podemos codificar y decodificar usando una combinación de [{recipient_id}, {offer_id}]
. Siempre produce un código de cupón de 8 caracteres exactos que también se puede actualizar en config/hashids.php
Para probar nuestro servicio de aplicación, hemos utilizado Codeception. Listo para usar, nos permite tener los tres tipos de pruebas, es decir, pruebas unitarias, funcionales y de aceptación en un marco unificado. En nuestro caso, hemos probado los objetos comerciales principales en AppServices
y también hemos escrito pruebas de aceptación para verificar la integración y funcionalidad de todos los puntos finales de API. Todos los casos de prueba se almacenan en el directorio tests
. y se puede ejecutar con el siguiente comando:
$ php vendor/bin/codecept run --steps
Para mantener los estándares de codificación en todo el equipo, creé el archivo phpcs.xml
, en el que se definen todos los estándares de codificación. y todos los archivos de código se pueden verificar de acuerdo con este archivo ejecutando el siguiente comando:
$ php vendor/bin/phpcs
Requisitos del entorno de desarrollo:
Configurando su entorno de desarrollo en su máquina local usando el script de configuración (para MAC/LINUX) :
git clone https://github.com/ahsanatiq/voucher-pool-api.git
cd voucher-pool-api
./setup.sh
Configuración manual (para 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
Ahora puede acceder a la aplicación a través de http://localhost:8080.
Ejecute las pruebas unitarias y las pruebas de aceptación en el contenedor de servicios PHP-FPM:
docker exec -it voucher-pool-php-fpm php vendor/bin/codecept run --steps
Puede acceder a la documentación pública de la API en Postman. Para importar y ejecutar todas las API, haga clic en "Ejecutar en Postman" en la barra superior. Después de instalar e importar, verá la nueva colección como "Newsletter2Go - Voucher API".