Debugowanie nieudanych żądań

Ostatnia aktualizacja: 3 miesiące temu

Gdy żądania się nie powiodą, systematyczne debugowanie pomaga szybko zidentyfikować problem.

Włącz szczegółowe logowanie

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;
  }
}

Najpierw sprawdź te rzeczy

1. Klucz API jest poprawny:

console.log('API key starts with:', apiKey.substring(0, 10));
console.log('API key length:', apiKey.length);

2. Nazwa nagłówka jest dokładna:

// Musi być małymi literami 'x-api-key'
headers: {
  'x-api-key': apiKey,  // ✓ Poprawnie
  'X-API-Key': apiKey,  // ✗ Źle
  'api-key': apiKey,    // ✗ Źle
}

3. JSON jest poprawny:

try {
  const body = JSON.stringify({ query: 'test' });
  console.log('Valid JSON:', body);
} catch (e) {
  console.error('Invalid JSON:', e);
}

4. Żądanie dociera do serwera:

// Użyj zakładki Network w narzędziach deweloperskich przeglądarki lub
curl -v -X POST https://api.cathopic.com/resources \
  -H "x-api-key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "test"}'

Częste błędy

Zły Content-Type:

// ✗ Źle
headers: {
  'Content-Type': 'text/plain'
}
// ✓ Poprawnie
headers: {
  'Content-Type': 'application/json'
}

Brak serializacji body do stringa:

// ✗ Źle
body: { query: 'test' }
// ✓ Poprawnie
body: JSON.stringify({ query: 'test' })

Użycie GET zamiast POST:

// ✗ Wszystkie endpointy wymagają POST
method: 'GET'
// ✓ Poprawnie
method: 'POST'

Testuj z minimalnym żądaniem

Odetnij wszystko do absolutnego minimum, aby odizolować problem:

const response = await fetch('https://api.cathopic.com/resources', {
  method: 'POST',
  headers: {
    'x-api-key': 'YOUR_ACTUAL_KEY_HERE',
    'Content-Type': 'application/json'
  },
  body: '{}'  // Pusty obiekt
});
console.log(response.status);
console.log(await response.json());

Jeśli to działa, stopniowo dodawaj z powrotem parametry, aż do momentu, gdy znów się nie powiedzie.

Porównaj z działającym przykładem

Przetestuj za pomocą curl, aby zweryfikować swoją implementację:

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}'

Jeśli curl działa, ale Twój kod nie, porównaj dokładnie nagłówki i treść (body).

Dalej utknąłeś?

Skontaktuj się z wsparciem deweloperskim z:

  • Pełna wiadomość o błędzie

  • Nagłówki żądania (ukryj swój pełny klucz API)

  • Treść żądania (body)

  • Status odpowiedzi i treść

  • Język programowania i biblioteka HTTP

  • Fragment kodu (bez ujawniania danych uwierzytelniających)

Czy ten artykuł był pomocny?