Les problèmes de réseau peuvent entraîner l’échec des requêtes à l’API. Voici comment gérer les dépassements de délai et les problèmes de connexion avec élégance.
Définir des délais appropriés
Définissez toujours des délais pour éviter que les requêtes restent en attente :
// JavaScript avec 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: 'Jesus' }),
signal: controller.signal
});
clearTimeout(timeout);
return await response.json();
} catch (error) {
clearTimeout(timeout);
if (error.name === 'AbortError') {
console.error('Requête dépassée après 30s');
} else {
console.error('Erreur réseau :', error);
}
throw error;
}
// Python avec 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': 'Jesus'},
timeout=30 # 30 secondes
)
return response.json()
except Timeout:
print('Requête dépassée après 30s')
raise
except RequestException as e:
print(f'Erreur réseau : {e}')
raise
Erreurs réseau courantes
Délai de connexion :
Impossible d’établir une connexion au serveur
En général, problème réseau ou de pare-feu
Vérifiez la connexion Internet
Vérifiez que le pare-feu autorise le HTTPS vers api.cathopic.com
Délai de lecture :
Connexion établie, mais aucune réponse
Le serveur peut être lent ou surchargé
Augmentez le délai ou réessayez plus tard
Échec de résolution DNS :
Impossible de résoudre api.cathopic.com
Problème du serveur DNS
Réessayez ou vérifiez les paramètres DNS
Réessayer avec un backoff
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(`Tous les ${maxRetries} essais ont échoué`);
throw error;
}
const waitTime = Math.pow(2, attempt) * 1000;
console.log(`L’essai ${attempt + 1} a échoué. Nouvelle tentative dans ${waitTime}ms...`);
await new Promise(resolve => setTimeout(resolve, waitTime));
}
}
}
Valeurs de délai recommandées
Délai de connexion : 10 secondes
Délai de lecture : 30 secondes
Recherche /resources : 30 secondes
/confirm licensing : 30 secondes
Déboguer les problèmes réseau
Utilisez curl pour tester la connectivité :
# Tester la connectivité de base
curl -v https://api.cathopic.com/resources
# Tester avec un délai
curl --max-time 30 -X POST https://api.cathopic.com/resources \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "test"}'
Vérifiez :
✓ api.cathopic.com se résout en DNS
✓ La connexion SSL/TLS réussit
✓ Une réponse HTTP est reçue
✓ Le temps de réponse est raisonnable (<5s en général)
Si les problèmes persistent, contactez support avec des détails de diagnostic réseau.