Limity żądań
Każdy request do API FourA przechodzi przez rate limiting. Napotkasz dwa rodzaje limitów: współbieżność (jednoczesne requesty) i RPM (requesty na minutę). Oba są egzekwowane dla poszczególnych usług.
Jak działa rate limiting
API egzekwuje limity na dwóch poziomach:
- Globalny limit API: dotyczy wszystkich requestów, niezależnie od endpointu. Ta weryfikacja odbywa się jako pierwsza.
- Limit dla usługi: dotyczy osobno każdego endpointu (single, proxy, browser). Ta weryfikacja jest uruchamiana tylko wtedy, gdy globalny limit zostanie zaliczony.
Jeśli globalny limit zostanie przekroczony, weryfikacja dla poszczególnych usług nie zostanie uruchomiona. Request musi przejść obie kontrole, zanim trafi do backendu.
Każdy poziom śledzi dwie metryki:
- Współbieżność: ile requestów działa w tym samym czasie.
- RPM: ile requestów wysłałeś w ciągu ostatnich 60 sekund.
Odpowiedzi rate limit
Gdy przekroczysz limit, API zwraca odpowiedź JSON z Twoim aktualnym zużyciem i obowiązującymi limitami.
429: Przekroczono RPM
{
"error": "Rate limit exceeded",
"status": 429,
"service": "single",
"retryAfter": 5,
"current": {
"concurrency": 12,
"rpm": 3000
},
"limits": {
"maxConcurrency": 500,
"maxRpm": 3000
}
}
Wysłałeś zbyt wiele requestów w ciągu ostatniej minuty. Odczekaj czas wskazany w retryAfter przed wysłaniem kolejnych.
503: Przekroczono współbieżność
{
"error": "Service at capacity",
"status": 503,
"service": "proxy",
"retryAfter": 2,
"current": {
"concurrency": 500,
"rpm": 1200
},
"limits": {
"maxConcurrency": 500,
"maxRpm": 3000
}
}
Zbyt wiele requestów działa jednocześnie. Część z Twoich wcześniejszych requestów jeszcze się nie zakończyła.
Usługa wyłączona
Gdy usługa jest tymczasowo wyłączana z powodu prac konserwacyjnych, API zwraca kod 503 z innym komunikatem o błędzie:
{
"error": "Service disabled",
"status": 503,
"retryAfter": 60
}
To nie jest rate limit. Usługa jest tymczasowo niedostępna. Sprawdź wartość retryAfter i spróbuj ponownie po upływie tej liczby sekund. Zazwyczaj problem ustępuje w ciągu kilku minut.
Nie myl tego z błędem 503 dotyczącym współbieżności. Odpowiedź „Service disabled” nie będzie zawierać pól current ani limits.
Pola odpowiedzi
| Pole | Typ | Opis |
|---|---|---|
error |
string | Czytelny dla człowieka komunikat o błędzie |
status |
number | Kod statusu HTTP (429 lub 503) |
service |
string | Usługa, która osiągnęła limit: single, proxy, browser lub api |
retryAfter |
number | Zalecany czas oczekiwania w sekundach przed ponowną próbą |
current.concurrency |
number | Twoja aktualna liczba aktywnych requestów |
current.rpm |
number | Twoje requesty w ciągu ostatnich 60 sekund |
limits.maxConcurrency |
number | Maksymalna dozwolona liczba jednoczesnych requestów |
limits.maxRpm |
number | Maksymalna dozwolona liczba requestów na minutę |
Obsługa rate limitów
Użyj pola retryAfter, aby zaimplementować mechanizm backoff:
import requests
import time
def fetch(url, max_retries=5):
for attempt in range(max_retries):
resp = requests.post(
"https://eu.api.foura.ai/api/single/",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
json={"method": "GET", "url": url}
)
if resp.status_code in (429, 503):
data = resp.json()
wait = data.get("retryAfter", 5)
time.sleep(wait)
continue
return resp
raise Exception("Max retries exceeded")
Wskazówki
- Sprawdzaj pola
currentw odpowiedziach rate limit, aby zrozumieć swoje wzorce zużycia. - Jeśli regularnie przekraczasz limity współbieżności, zmniejsz liczbę równoległych requestów.
- Jeśli przekraczasz limity RPM, dodaj niewielkie opóźnienie między requestami lub rozłóż je w czasie.
- Wartość
retryAfterróżni się w zależności od typu limitu: 2 sekundy dla współbieżności, 5 sekund dla RPM. - Odpowiedź „Service disabled” oznacza trwające prace konserwacyjne. Nie wysyłaj ciągłych requestów do endpointu.
Powiązane
- API Endpoints: Pełna dokumentacja parametrów
- Obsługa błędów: Wszystkie typy błędów i odpowiedzi
- Rozwiązywanie problemów: Typowe problemy i rozwiązania