Requests, APIs y JSON en Python: integración robusta con servicios externos

Aprende a consumir APIs REST con control de errores HTTP, timeouts y parseo JSON defensivo para flujos de backend confiables.

Consumir APIs no es solo hacer un GET: hay que validar estado HTTP, tiempos de espera, formato de respuesta y errores de red.

La librería `requests` simplifica llamadas HTTP, pero necesitas usarla con reglas defensivas para producción.

JSON suele ser el formato estándar de intercambio entre servicios, y debe parsearse con validaciones mínimas de estructura.

Un cliente robusto separa capa HTTP de lógica de negocio para testear y evolucionar mejor.

  • Nunca llames una API sin timeout: podrías bloquear proceso indefinidamente.
  • `requests.get(url, timeout=5)` evita bloqueos eternos cuando el servicio externo se degrada.
  • `response.status_code` y `response.raise_for_status()` son controles básicos para detectar respuestas no exitosas.
  • No mezcles validación HTTP con lógica de negocio; encapsula cliente en funciones dedicadas.
  • Que llegue JSON no significa que tenga la estructura esperada.

1) Llamadas HTTP con `requests` y timeout

Nunca llames una API sin timeout: podrías bloquear proceso indefinidamente.

`requests.get(url, timeout=5)` evita bloqueos eternos cuando el servicio externo se degrada.

`response.status_code` y `response.raise_for_status()` son controles básicos para detectar respuestas no exitosas.

No mezcles validación HTTP con lógica de negocio; encapsula cliente en funciones dedicadas.

2) Parseo JSON defensivo

Que llegue JSON no significa que tenga la estructura esperada.

Valida claves obligatorias antes de usar datos (`id`, `status`, `data`, etc.).

`dict.get(...)` con fallback ayuda, pero en campos críticos conviene fallar explícitamente con mensaje claro.

Si el contrato de API cambia, una validación temprana evita errores silenciosos en capas superiores.

3) Manejo de errores de red y API

Distingue fallos de red, timeout y errores HTTP para responder correctamente.

`requests.exceptions.Timeout` indica latencia excesiva; `ConnectionError` apunta a fallo de conectividad.

`HTTPError` significa que el servidor respondió, pero con estado no 2xx.

Registrar contexto (endpoint, método, request_id) acelera diagnóstico en producción.

  • Usa timeout explícito en todas las llamadas.
  • Valida `status_code` y estructura JSON.
  • Separa cliente HTTP de reglas de negocio.
  • Registra contexto útil para soporte.
Python
19

Requests, APIs y JSON en Python: integración robusta con servicios externos

Aprende a consumir APIs REST con control de errores HTTP, timeouts y parseo JSON defensivo para flujos de backend confiables.

Código del tema: Automatizacion y codigo legible en Python

📘 Teoría

1) Llamadas HTTP con `requests` y timeout

Nunca llames una API sin timeout: podrías bloquear proceso indefinidamente.

1

`requests.get(url, timeout=5)` evita bloqueos eternos cuando el servicio externo se degrada.

2

`response.status_code` y `response.raise_for_status()` son controles básicos para detectar respuestas no exitosas.

3

No mezcles validación HTTP con lógica de negocio; encapsula cliente en funciones dedicadas.

2) Parseo JSON defensivo

Que llegue JSON no significa que tenga la estructura esperada.

Valida claves obligatorias antes de usar datos (`id`, `status`, `data`, etc.).

`dict.get(...)` con fallback ayuda, pero en campos críticos conviene fallar explícitamente con mensaje claro.

Si el contrato de API cambia, una validación temprana evita errores silenciosos en capas superiores.

1

Extracción segura con `get`

Fallback para campos opcionales.

2

Validación de campos obligatorios

Fallar rápido cuando contrato no se cumple.

3) Manejo de errores de red y API

Distingue fallos de red, timeout y errores HTTP para responder correctamente.

`requests.exceptions.Timeout` indica latencia excesiva; `ConnectionError` apunta a fallo de conectividad.

`HTTPError` significa que el servidor respondió, pero con estado no 2xx.

Registrar contexto (endpoint, método, request_id) acelera diagnóstico en producción.

  • Usa timeout explícito en todas las llamadas.
  • Valida `status_code` y estructura JSON.
  • Separa cliente HTTP de reglas de negocio.
  • Registra contexto útil para soporte.

🧪 Aprende probando

Ejemplo Ejemplo: leer datos críticos de payload Parsea JSON y extrae estado/nombre con validación mínima.

🏁 Retos

Reto Reto: extrae `status` del JSON Implementa la lectura de estado desde el payload para usarlo en lógica posterior.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre Python.

Test de Python

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros. culTest

La hice en febrero de 2026 para facilitar el aprendizaje de mis alumnos. La idea es aprender desarrollo web practicando y que el proyecto siga creciendo con nuevos temas, tests y retos.

Está inspirada en MDN, W3Schools, CodePen, Manz y muchos otros sitios de documentación sobre desarrollo web. Quería combinar teoría útil, ejemplos ejecutables, retos y el sistema de tests que ya tenía en culTest. culTest

Si te gustó, si no te gustó o si quieres escribirme, puedes hacerlo en cristianeslava@gmail.com