Principio
Cada fuente de datos externa — APIs, web scrapers, drops de archivos, colas de mensajes — eventualmente fallará, devolverá datos malformados o cambiará su esquema sin previo aviso. La capa de ingesta debe diseñarse para manejar esta realidad desde el primer día.
Esto significa tres cosas: validar cada registro en la frontera antes de que entre en tu sistema, implementar lógica explícita de reintentos y circuit breakers en lugar de esperar lo mejor, y preservar datos crudos para poder reprocesar si se descubre un bug en la transformación.
Cómo Funciona
- Validar en la frontera. Cada registro de una fuente externa pasa por un validador de esquema (Pydantic, JSON Schema o equivalente) antes del almacenamiento. Los registros malformados se rechazan con mensajes de error estructurados, no se descartan silenciosamente.
- Manejar el fallo explícitamente. Los circuit breakers dejan de llamar a una API después de fallos repetidos. La lógica de reintentos usa backoff exponencial. Las colas dead-letter capturan registros que fallan la validación para inspección manual.
- Preservar datos crudos. Almacenar el payload crudo junto al registro transformado. Si se encuentra un bug de transformación, el reprocesamiento no requiere volver a obtener datos de la fuente.
- Monitorizar frescura. Rastrear la edad del registro más reciente por fuente. Los datos obsoletos son un fallo — alertar sobre ellos.
Evidencia
- SkyCast: Patrón de circuit breaker en la API de AEMET — 5 errores consecutivos detienen la ingesta y registran una alerta. El dashboard continúa sirviendo datos en caché. Los payloads crudos de AEMET se almacenan para reprocesamiento.
- RASPAL: Automatización de navegador Patchright con lógica de reintentos. La salida JSON se valida contra un esquema antes de escribir. Los fallos de extracción se registran con la URL y el error para revisión manual.
Cuándo Aplicar
- Nueva integración de API
- Pipeline de web scraping
- Drop de datos basado en archivos
- Consumidor de cola de mensajes