# api_gateway Puerta de enlace HTTP (FastAPI) que actúa como punto de entrada único para el sistema IPSExtractor. Enruta las peticiones del cliente hacia los microservicios internos sin lógica de negocio propia. --- ## Puerto **8189** en el host (mapeado al **8000** interno del contenedor). Es el único puerto publicado por `docker-compose`. --- ## Enrutamiento | Ruta cliente | Servicio destino | Descripción | |--------------|------------------|-------------| | `GET /health/live` | *(local)* | Liveness sin consultar upstreams | | `GET /health` | Agrega `/health` de los tres servicios | Estado del sistema | | `GET /models` | `extraction:8001/models` | Modelos LLM disponibles | | `GET /config` | `extraction:8001/config` + `cleaning:8002/rules` | Configuración | | `/extraction/{path}` | `extraction:8001/{path}` | Extracción (quita prefijo) | | `/tasks/{path}` | `extraction:8001/tasks/{path}` | Tareas de extracción | | `/jobs/{path}` | `extraction:8001/jobs/{path}` | Jobs | | `/count-jobs/{path}` | `extraction:8001/count-jobs/{path}` | Jobs de conteo | | `/cleaning/{path}` | `cleaning:8002/{path}` | Limpieza | | `/count/{path}` | `count-api:8080/{path}` | Conteo OCR+ML (quita prefijo) | El proxy reenvía método, query string, headers y body sin modificaciones. Timeouts: JSON 30s lectura; uploads `/count/*` e ingest 600s. --- ## Variables de entorno | Variable | Default | Descripción | |----------|---------|-------------| | `EXTRACTION_URL` | `http://extraction:8001` | URL interna del servicio extraction | | `CLEANING_URL` | `http://cleaning:8002` | URL interna del servicio cleaning | | `COUNT_URL` | `http://count-api:8080` | URL interna del servicio count-api | --- ## CORS Solo permite orígenes `localhost` y `127.0.0.1`. Sin autenticación. --- ## Estructura del código ``` api/ main.py — FastAPI app con proxy HTTP (httpx) Dockerfile requirements.txt — fastapi, httpx, uvicorn ``` --- ## Arrancar localmente ```bash docker compose up --build api_gateway ``` API disponible en `http://127.0.0.1:8189` (único puerto expuesto por docker-compose).