Nota: Este es un proyecto de API para la gestión y automatización de huertos urbanos. La imagen del logo es DUMMY y se actualizará en el futuro.
Horti-CAT es la solución integral para la gestión y automatización de huertos urbanos. Construido sobre el Slim Framework y siguiendo los estándares PSR-7, Horti-CAT integra herramientas modernas para ofrecer una API robusta y escalable, ideal para integraciones IoT y aplicaciones comerciales.
Características Clave:
- Guzzle: Cliente HTTP para consumir APIs externas.
- Monolog: Registro estructurado de logs.
- PHP Dotenv: Gestión de variables de entorno.
- Eloquent ORM (Illuminate/Database): Interacción con la base de datos.
- Swagger-PHP: Documentación de la API según OpenAPI.
- PHPUnit: Ejecución de pruebas unitarias e integradas.
- Firebase/php-jwt: Creación y validación de tokens JWT para autenticación.
- PHP-DI: Inyección de dependencias.
Tip
Horti-CAT sigue una arquitectura hexagonal/DDD que separa el dominio, los casos de uso, la infraestructura y las interfaces. Esto facilita el mantenimiento, testeo y escalabilidad del sistema.
- Requisitos
- Instalación y Setup
- Ejecución del Entorno de Desarrollo
- Makefile
- Ejecución de Tests
- Dependencias del Proyecto
- Checklist Funcionalidades
- Contribuciones
- Despliegue en Producción
- Licencia
- Docker
- Docker Compose
- Git
- (Opcional) Make
- (Opcional) PHPStorm u otro IDE
-
Clonar el Repositorio:
git clone https://github.com/tu-usuario/mi-proyecto-api.git cd mi-proyecto-api -
Configurar Variables de Entorno:
Renombra
.env.examplea .env y ajusta los valores (por ejemplo,JWT_SECRET, configuración de base de datos, etc.). -
Construir las Imágenes Docker:
make build
-
Levantar el Entorno de Desarrollo:
make up
-
Instalar Dependencias de Composer:
make composer-install
-
La API se ejecuta mediante un contenedor Nginx que expone el puerto 8080.
Accede a la aplicación en: http://localhost:8080 -
Estructura del Proyecto:
- public/: Front controller (index.php) y archivos estáticos.
- src/: Código fuente (Dominio, Aplicación, Infraestructura, Interfaces).
- config/: Archivos de configuración (dependencies, middleware, routes).
-
Para abrir una shell en el contenedor PHP:
make exec-php
El proyecto incluye un Makefile para simplificar las tareas comunes:
-
build:
Construye las imágenes Docker.make build
-
up:
Levanta los contenedores en segundo plano.make up
-
down:
Detiene y elimina los contenedores.make down
-
restart:
Reinicia los contenedores.make restart
-
composer-install:
Instala las dependencias de Composer dentro del contenedor PHP.make composer-install
-
composer-dump-autoload:
Regenera el autoload de Composer.make composer-dump-autoload
-
exec-php:
Abre una shell interactiva en el contenedor PHP.make exec-php
-
test:
Ejecuta todos los tests con PHPUnit.make test -
test-unit:
Ejecuta la suite de tests unitarios.make test-unit
-
test-integration:
Ejecuta la suite de tests de integración.make test-integration
-
openapi:
Genera la documentación OpenAPI (Swagger) para la API.make openapi
-
help:
Muestra la lista de comandos y su descripción.make help
El proyecto utiliza PHPUnit para asegurar la calidad del código. Los tests se dividen en:
- Tests Unitarios: (en
tests/Unit/) - Tests de Integración: (en
tests/Integration/)
Para ejecutar todos los tests:
make testPara ejecutar solo los tests unitarios:
make test-unitPara ejecutar solo los tests de integración:
make test-integration- Slim Framework 4.x
- Guzzle
- Monolog
- PHP Dotenv
- Eloquent ORM (Illuminate/Database)
- Swagger-PHP
- PHPUnit
- Firebase/php-jwt
- PHP-DI
- (Opcional) Mockery (para mocks, si se prefiere sobre PHPUnit nativo)
- Autenticación y Seguridad:
- Endpoint
/auth/loginpara obtener un token JWT. - Middleware JWT que protege endpoints bajo
/api/*.
- Endpoint
- Documentación y Soporte:
- Documentación generada con Swagger-PHP, visible en
/docs.
- Documentación generada con Swagger-PHP, visible en
- Monitorización:
- Health endpoint (
/health) para comprobar el estado de la API. - Metrics endpoint (
/metrics) para exponer métricas (por ejemplo, Prometheus).
- Health endpoint (
- Gestión de Errores:
- Manejador de errores centralizado que sigue el estándar RFC 7807.
- Versionado de la API
- Registro de Logs y Auditoría
- Rate Limiting y Optimización
¡Las contribuciones son bienvenidas!
- Fork el repositorio.
- Crea una nueva rama:
git checkout -b feature/nueva-funcionalidad
- Realiza tus cambios y haz commits descriptivos.
- Envía un Pull Request para revisión.
Pasos para desplegar:
- Configurar el entorno:
Actualiza el archivo .env para producción. - Construir imágenes optimizadas:
Utilizadocker-compose.prod.yml:docker-compose -f docker-compose.prod.yml build
- Desplegar en un servidor:
Considera servicios compatibles con Docker (AWS, DigitalOcean, Heroku). - Integrar CI/CD:
Configura pipelines (p.ej., GitHub Actions) para automatizar pruebas y despliegues.
- Arquitectura:
Horti-CAT sigue un patrón modular basado en Slim-Skeleton y una arquitectura hexagonal/DDD:- Dominio: Entidades y reglas de negocio.
- Aplicación: Casos de uso.
- Infraestructura: Implementaciones concretas.
- Interfaces: Adaptadores de entrada (controladores HTTP).
- Documentación:
La API se documenta con Swagger-PHP y se puede visualizar con Swagger UI (en/docs). - Manejo de Errores:
Se implementa un error handler centralizado que devuelve respuestas siguiendo el estándar RFC 7807. - Seguridad:
Endpoints públicos (p.ej.,/auth/login,/health,/metrics) y endpoints protegidos (bajo/api).
Este proyecto se distribuye bajo la licencia MIT.
Recuerda:
- Mantén actualizadas las dependencias y la documentación del proyecto.
- Revisa las pruebas regularmente para asegurarte de que los cambios en la lógica de negocio no rompan el contrato de la API.
- ¡Buena suerte y feliz codificación!