Problemas de timeout y red

Última actualización: hace 3 meses

Los problemas de red pueden causar que las peticiones de API fallen. Aquí está cómo manejar timeouts y problemas de conexión de forma elegante.

Configurar timeouts apropiados

Siempre configura timeouts para evitar peticiones colgadas:

// JavaScript con fetch
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 30000); // 30s
try {
  const response = await fetch('https://api.cathopic.com/resources', {
    method: 'POST',
    headers: {
      'x-api-key': apiKey,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ query: 'Jesús' }),
    signal: controller.signal
  });
  
  clearTimeout(timeout);
  return await response.json();
  
} catch (error) {
  clearTimeout(timeout);
  
  if (error.name === 'AbortError') {
    console.error('Petición agotó timeout después de 30s');
  } else {
    console.error('Error de red:', error);
  }
  throw error;
}
// Python con requests
import requests
from requests.exceptions import Timeout, RequestException
try:
    response = requests.post(
        'https://api.cathopic.com/resources',
        headers={'x-api-key': api_key},
        json={'query': 'Jesús'},
        timeout=30  # 30 segundos
    )
    return response.json()
    
except Timeout:
    print('Petición agotó timeout después de 30s')
    raise
except RequestException as e:
    print(f'Error de red: {e}')
    raise

Errores de red comunes

Timeout de conexión:

  • No se puede establecer conexión al servidor

  • Usualmente problema de red o firewall

  • Verifica conexión a internet

  • Verifica que firewall permita HTTPS a api.cathopic.com

Timeout de lectura:

  • Conexión establecida pero sin respuesta

  • El servidor puede estar lento o sobrecargado

  • Aumenta timeout o reintenta más tarde

Fallo de resolución DNS:

  • No puede resolver api.cathopic.com

  • Problema con servidor DNS

  • Inténtalo de nuevo o verifica configuración DNS

Reintentar con retroceso

async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      const controller = new AbortController();
      const timeout = setTimeout(() => controller.abort(), 30000);
      
      const response = await fetch(url, {
        ...options,
        signal: controller.signal
      });
      
      clearTimeout(timeout);
      
      if (!response.ok) {
        throw new Error(`HTTP ${response.status}`);
      }
      
      return await response.json();
      
    } catch (error) {
      const isLastAttempt = attempt === maxRetries - 1;
      
      if (isLastAttempt) {
        console.error(`Todos los ${maxRetries} intentos fallaron`);
        throw error;
      }
      
      const waitTime = Math.pow(2, attempt) * 1000;
      console.log(`Intento ${attempt + 1} falló. Reintentando en ${waitTime}ms...`);
      
      await new Promise(resolve => setTimeout(resolve, waitTime));
    }
  }
}

Valores de timeout recomendados

  • Timeout de conexión: 10 segundos

  • Timeout de lectura: 30 segundos

  • Búsqueda /resources: 30 segundos

  • Licenciamiento /confirm: 30 segundos

Depurar problemas de red

Usa curl para probar conectividad:

# Probar conectividad básica
curl -v https://api.cathopic.com/resources
# Probar con timeout
curl --max-time 30 -X POST https://api.cathopic.com/resources \
  -H "x-api-key: TU_CLAVE" \
  -H "Content-Type: application/json" \
  -d '{"query": "test"}'

Verifica:

  • ✓ DNS resuelve api.cathopic.com

  • ✓ Conexión SSL/TLS tiene éxito

  • ✓ Se recibe respuesta HTTP

  • ✓ Tiempo de respuesta razonable (<5s típicamente)

Si los problemas persisten, contacta con soporte con detalles de diagnóstico de red.

¿Te ha sido útil este artículo?