Este es un proyecto mínimo hecho con FastAPI que expone un CRUD sencillo para manejar items.
Incluye validación con Pydantic v2, documentación automática de la API, pruebas con pytest, y configuración para correr en Docker / Docker Compose.
- Clonar el repositorio e instalar dependencias:
git clone <repo-url>
cd python-fastapi-mvp
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt- Iniciar la API:
uvicorn app.main:app --reload- Revisar la documentación interactiva:
- Swagger UI → http://127.0.0.1:8000/docs
- ReDoc → http://127.0.0.1:8000/redoc
- Healthcheck → http://127.0.0.1:8000/health
Necesitas tener Docker Desktop en ejecución.
- Construir la imagen:
docker compose build- Levantar los contenedores:
docker compose upLa API queda disponible en:
- Swagger UI → http://localhost:8000/docs
- Healthcheck → http://localhost:8000/health
- Apagar los contenedores:
docker compose down- Ejecutar pruebas dentro del contenedor:
docker compose run --rm fastapi pytest -q- GET
/health
{ "status": "ok" }- GET
/items/
[]- POST
/items/
{
"name": "Laptop",
"price": 1200
}Respuesta:
{
"id": "a4d7f0e6-4e5a-4cb2-9f54-1a98c1c0a452",
"name": "Laptop",
"price": 1200
}- GET
/items/{id}
Ejemplo:/items/a4d7f0e6-4e5a-4cb2-9f54-1a98c1c0a452
- DELETE
/items/{id}
Respuesta:
204 No Content
Puedes probar los endpoints desde Swagger UI, Postman o con curl:
curl -X POST http://localhost:8000/items/ -H "Content-Type: application/json" -d '{"name":"Laptop","price":1200}'Correr los tests en local:
pytest -qResultado esperado:
.
1 passed in 0.50s
También puedes correrlos dentro del contenedor:
docker compose run --rm fastapi pytest -q- Actualmente los datos se almacenan en PostgreSQL cuando corres con Docker, o en SQLite local si no defines una base externa.
- El proyecto está configurado en Python 3.12.
- FastAPI
- Pydantic v2
- Uvicorn
- SQLAlchemy + PostgreSQL
- Pytest
- Docker / Docker Compose