API REST con 9 endpoints para recopilar datos de clientes a través de formularios específicos.
API en vivo: https://questions.kachadigitalbcn.com/
- Documentación Swagger: https://questions.kachadigitalbcn.com/docs
- ReDoc: https://questions.kachadigitalbcn.com/redoc
- Health Check: https://questions.kachadigitalbcn.com/health
- 9 endpoints POST organizados por categorías
- Validación estricta con Pydantic v2
- Documentación automática con OpenAPI/Swagger
- Ejemplos incluidos para facilitar las pruebas
- Almacenamiento en memoria (demo - cambiar por BD en producción)
- CORS habilitado para desarrollo
-
Clona o descarga el proyecto
-
Crea un entorno virtual:
python -m venv venv source venv/bin/activate # Linux/Mac # o venv\Scripts\activate # Windows
-
Instala las dependencias:
pip install -r requirements.txt
# Opción 1: Usando uvicorn directamente
uvicorn main:app --reload --host 0.0.0.0 --port 8000
# Opción 2: Ejecutando el archivo main.py
python main.pyLa API estará disponible en: http://localhost:8000
# Crear la red externa
docker network create optimroute
# Construir y ejecutar con Docker Compose
docker compose up --build
# Solo construir
docker compose build
# Ejecutar en segundo plano
docker compose up -dLa API estará disponible en: http://localhost:8000
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- Swagger UI: https://questions.kachadigitalbcn.com/docs
- ReDoc: https://questions.kachadigitalbcn.com/redoc
{
"age": "25-35"
}Opciones: "18-24", "25-35", "35-44", "45+"
{
"name": "Ana Pérez",
"street": "Gran Vía",
"number": "123",
"floor": "4",
"door": "B",
"stair": "2"
}{
"document_type": "DNI",
"document_number": "12345678Z",
"phone": "+34 600 123 456"
}{
"source": "Instagram"
}{
"store": "KCH Centro"
}{
"service_type": "Express"
}{
"products": ["Champú", "Acondicionador", "Serum"]
}{
"answer": "Sí"
}{
"email": "ana@example.com",
"large_family": true
}Endpoint para ver todos los datos almacenados en memoria (solo para desarrollo).
Todos los endpoints POST devuelven:
{
"id": "f9d0b4e2-9a9a-4fa7-9c6c-5c3b7bc9e123",
"form": "age",
"received_at": "2025-09-26T12:00:00Z",
"data": {
// datos del formulario enviado
}
}kch-questions/
├── main.py # Aplicación FastAPI principal
├── database.py # Configuración de base de datos PostgreSQL
├── init_database.py # Script de inicialización de BD
├── test_main.py # Suite completa de tests con pytest
├── requirements.txt # Dependencias Python
├── Dockerfile # Configuración Docker
├── docker-compose.yml # Orquestación de servicios
├── start.sh # Script de inicio del contenedor
├── .env # Variables de entorno
├── README.md # Este archivo
└── venv/ # Entorno virtual (desarrollo local)
- Los datos se almacenan en memoria (
DBdict) solo para demo - En producción, reemplazar por una base de datos real
- CORS está configurado para permitir todos los orígenes (ajustar en producción)
- Todos los campos tienen validación estricta y ejemplos
- La documentación se genera automáticamente con OpenAPI
# Ejecutar todos los tests
pytest
# Ejecutar tests con información detallada
pytest -v
# Ejecutar tests con cobertura
pytest --cov=main
# Ejecutar un test específico
pytest test_main.py::TestAgeEndpoint::test_submit_age_valid
# Ejecutar tests de una clase específica
pytest test_main.py::TestAgeEndpointLos tests están organizados en clases por endpoint:
TestAgeEndpoint- Tests para/form/ageTestPersonalDataEndpoint- Tests para/form/personal-dataTestIdentificationEndpoint- Tests para/form/identificationTestDiscoveryEndpoint- Tests para/form/discoveryTestFavoriteStoreEndpoint- Tests para/form/favorite-storeTestDeliveryTypeEndpoint- Tests para/form/delivery-typeTestProductsEndpoint- Tests para/form/productsTestWeeklyPromosKnowledgeEndpoint- Tests para/form/weekly-promos-knowledgeTestContactEndpoint- Tests para/form/contactTestDebugEndpoint- Tests para/debug/dumpTestResponseFormat- Tests para verificar formato de respuestaTestErrorHandling- Tests para manejo de errores
Los tests cubren:
✅ Casos válidos: Todos los endpoints con datos correctos
✅ Validación de campos: Campos requeridos y opcionales
✅ Validación de tipos: Enums, emails, teléfonos, etc.
✅ Casos límite: Listas vacías, strings vacíos, etc.
✅ Formato de respuesta: Estructura consistente en todas las respuestas
✅ Manejo de errores: JSON inválido, endpoints inexistentes
✅ Almacenamiento: Verificación de datos en memoria
También puedes usar la interfaz Swagger en /docs para probar todos los endpoints interactivamente, o utiliza curl/Postman con los ejemplos proporcionados.
Ejemplo con curl:
Desarrollo local:
curl -X POST "http://localhost:8000/form/age" \
-H "Content-Type: application/json" \
-d '{"age": "25-35"}'Producción:
curl -X POST "https://questions.kachadigitalbcn.com/form/age" \
-H "Content-Type: application/json" \
-d '{"age": "25-35"}'