Problemy z siecią mogą powodować niepowodzenie żądań do API. Oto jak łagodnie obsługiwać przekroczenia limitu czasu i problemy z połączeniem.
Ustawianie odpowiednich limitów czasu
Zawsze ustawiaj limity czasu, aby uniknąć zawieszania się żądań:
// JavaScript z 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('Żądanie przekroczyło limit czasu po 30s');
} else {
console.error('Błąd sieci:', error);
}
throw error;
}
// Python z 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 sekund
)
return response.json()
except Timeout:
print('Żądanie przekroczyło limit czasu po 30s')
raise
except RequestException as e:
print(f'Błąd sieci: {e}')
raise
Częste błędy sieci
Przekroczenie limitu czasu połączenia:
Nie można nawiązać połączenia z serwerem
Zwykle problem z siecią lub zaporą (firewall)
Sprawdź połączenie internetowe
Zweryfikuj, czy zapora pozwala na HTTPS do api.cathopic.com
Przekroczenie limitu czasu odczytu:
Połączenie zostało nawiązane, ale brak odpowiedzi
Serwer może być wolny lub przeciążony
Zwiększ limit czasu lub spróbuj ponownie później
Błąd rozwiązywania DNS:
Nie można rozwiązać api.cathopic.com
Problem z serwerem DNS
Spróbuj ponownie lub sprawdź ustawienia DNS
Ponawiaj z 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(`Wszystkie ${maxRetries} próby nie powiodły się`);
throw error;
}
const waitTime = Math.pow(2, attempt) * 1000;
console.log(`Próba ${attempt + 1} nie powiodła się. Ponawianie za ${waitTime}ms...`);
await new Promise(resolve => setTimeout(resolve, waitTime));
}
}
}
Rekomendowane wartości limitów czasu
Limit czasu połączenia: 10 sekund
Limit czasu odczytu: 30 sekund
Wyszukiwanie /resources: 30 sekund
/confirm licensing: 30 sekund
Debugowanie problemów z siecią
Użyj curl do testowania łączności:
# Test podstawowej łączności
curl -v https://api.cathopic.com/resources
# Test z limitem czasu
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"}'
Sprawdź:
✓ DNS rozwiązuje api.cathopic.com
✓ Połączenie SSL/TLS przebiega pomyślnie
✓ Otrzymano odpowiedź HTTP
✓ Czas odpowiedzi jest rozsądny (<5s zazwyczaj)
Jeśli problemy będą się utrzymywać, skontaktuj się z supportem, podając szczegóły diagnostyki sieci.