API RESTful modular para la gestión de tareas (To-Do), desarrollada aplicando buenas prácticas de ingeniería de software, arquitectura en capas, validación de datos, suite de pruebas automatizadas y empaquetamiento ligero con Docker.
- CRUD Completo: Creación, lectura, filtrado, actualización y eliminación de tareas.
- Respuestas Estándar HTTP: Manejo estricto de estados HTTP (incluyendo
204 NO CONTENTpara eliminación exitosa y404 NOT FOUNDpara recursos inexistentes). - Validación de Datos: Uso de schemas estrictos mediante Pydantic y SQLModel.
- Arquitectura Modular: Separación clara entre capa API (Routers & Endpoints), Capa CRUD, Modelos y Schemas.
- Testing Automatizado: Suite de pruebas de integración con
pytestyTestClient. - Aislamiento en RAM: Fixtures con SQLite en memoria (
sqlite:///:memory:) enconftest.pypara asegurar tests independientes, rápidos y sin efectos secundarios en la BD real. - 94% de Cobertura de Código: Cobertura verificada del 100% en capas de negocio, endpoints y CRUD mediante
pytest-cov. - Contenedor Ultra Ligero: Despliegue en Docker usando
python:3.12-alpine(~53 MB RAM en idle).
- Lenguaje: Python 3.12
- Framework Web: FastAPI
- ORM / Validaciones: SQLModel & Pydantic
- Base de Datos: SQLite (Desarrollo) / In-Memory SQLite (Testing)
- Testing: Pytest, TestClient, Pytest-Cov
- Contenedorización: Docker, Docker Compose (Alpine Linux)
backend/
├── app/
│ ├── api/ # Capa de presentación / entrada HTTP
│ │ ├── deps.py # Inyección de dependencias (get_db)
│ │ └── v1/
│ │ ├── router.py # Concentrador global de rutas V1
│ │ └── endpoints/
│ │ └── tareas.py# Endpoints del módulo de tareas
│ ├── crud/ # Lógica de acceso a datos / Queries DB
│ │ └── crud_tarea.py
│ ├── models/ # Modelos de entidad para BD (SQLModel)
│ │ └── tarea.py
│ ├── schemas/ # DTOs / Esquemas de validaciones (Pydantic)
│ │ └── tarea.py
│ ├── database.py # Configuración del motor y sesión DB
│ └── main.py # Punto de entrada de la aplicación FastAPI
├── tests/ # Pruebas automatizadas
│ ├── api/
│ │ └── test_tareas.py # Pruebas de integración de endpoints
│ └── conftest.py # Fixtures globales de Pytest (BD en RAM)
├── .gitignore
├── Dockerfile
├── docker-compose.yml
├── README.md
└── requirements.txt
Si tienes Docker y Docker Compose instalados, puedes levantar todo el servicio en un solo comando:
docker compose up --buildAccede a la documentación interactiva Swagger en:
👉 http://localhost:8000/docs
-
Clonar el repositorio:
git clone [https://github.com/tu-usuario/todo-fastapi-backend.git](https://github.com/tu-usuario/todo-fastapi-backend.git) cd todo-fastapi-backend -
Crear y activar entorno virtual:
python -m venv venv # En Windows: venv\Scripts\activate # En Linux/Mac: source venv/bin/activate
-
Instalar dependencias:
pip install -r requirements.txt
-
Ejecutar el servidor de desarrollo:
fastapi dev app/main.py
Accede a la documentación en
http://127.0.0.1:8000/docs.
Para ejecutar la suite de pruebas automatizadas:
pytest -v -W ignorePara generar el reporte de cobertura de código (pytest-cov):
pytest --cov=app --cov-report=term-missing -W ignorePara ejecutar los tests dentro del contenedor Docker:
docker exec -it todo_fastapi_app pytest -v -W ignore