Lorsque les requêtes échouent, un débogage systématique permet d’identifier rapidement le problème.
Activer la journalisation détaillée
async function debugRequest(url, options) {
console.log('=== API Request ===");
console.log('URL:', url);
console.log('Method:', options.method);
console.log('Headers:', {
...options.headers,
'x-api-key': options.headers['x-api-key']?.substring(0, 10) + '...'
});
console.log('Body:', options.body);
const startTime = Date.now();
try {
const response = await fetch(url, options);
const duration = Date.now() - startTime;
console.log('=== API Response ===");
console.log('Status:', response.status, response.statusText);
console.log('Duration:', duration + 'ms');
console.log('Headers:', Object.fromEntries(response.headers));
const data = await response.json();
console.log('Body:', data);
return { response, data };
} catch (error) {
console.error('=== Request Failed ===");
console.error('Error:', error.message);
console.error('Duration:', Date.now() - startTime + 'ms');
throw error;
}
}
Vérifiez d’abord ces points
1. La clé API est correcte :
console.log('API key starts with:', apiKey.substring(0, 10));
console.log('API key length:', apiKey.length);
2. Le nom du header est exact :
// Doit être en minuscules 'x-api-key'
headers: {
'x-api-key': apiKey, // ✓ Correct
'X-API-Key': apiKey, // ✗ Incorrect
'api-key': apiKey, // ✗ Incorrect
}
3. Le JSON est valide :
try {
const body = JSON.stringify({ query: 'test' });
console.log('Valid JSON:', body);
} catch (e) {
console.error('Invalid JSON:', e);
}
4. La requête atteint le serveur :
// Utilisez l’onglet Network des DevTools du navigateur ou
curl -v -X POST https://api.cathopic.com/resources \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "test"}'
Erreurs courantes
Mauvais Content-Type :
// ✗ Incorrect
headers: {
'Content-Type': 'text/plain'
}
// ✓ Correct
headers: {
'Content-Type': 'application/json'
}
Ne pas sérialiser le body :
// ✗ Incorrect
body: { query: 'test' }
// ✓ Correct
body: JSON.stringify({ query: 'test' })
Utiliser GET au lieu de POST :
// ✗ Tous les endpoints nécessitent POST
method: 'GET'
// ✓ Correct
method: 'POST'
Tester avec une requête minimale
Réduisez au strict minimum pour isoler le problème :
const response = await fetch('https://api.cathopic.com/resources', {
method: 'POST',
headers: {
'x-api-key': 'YOUR_ACTUAL_KEY_HERE',
'Content-Type': 'application/json'
},
body: '{}' // Objet vide
});
console.log(response.status);
console.log(await response.json());
Si cela fonctionne, ajoutez progressivement les paramètres jusqu’à ce que cela échoue.
Comparer avec un exemple fonctionnel
Testez avec curl pour vérifier votre implémentation :
curl -X POST https://api.cathopic.com/resources \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "Jesus", "page": 1, "page_size": 5}'
Si curl fonctionne mais pas votre code, comparez les headers et le body exacts.
Encore bloqué ?
Contactez l’assistance développeur avec :
Le message d’erreur complet
Les headers de la requête (masquez votre clé API complète)
Le body de la requête
Le statut de la réponse et le body
Le langage de programmation et la bibliothèque HTTP
Un extrait de code (sans exposer les identifiants)