Rate Limits
Всяка FourA API request преминава през rate limiting. Ще срещнете два типа лимити: concurrency (едновременни requests) и RPM (requests в минута). И двата се прилагат за всяка услуга.
Как работят Rate Limits
API налага лимити на две нива:
- Глобален API лимит: прилага се за всички requests независимо от endpoint. Тази проверка се извършва първа.
- Лимит за услуга: прилага се отделно за всеки endpoint (single, proxy, browser). Тази проверка се извършва само ако глобалният лимит е преминат успешно.
Ако глобалният лимит бъде достигнат, проверката за отделна услуга не се извършва. Дадена request трябва да премине и двете проверки, преди да достигне до backend.
Всяко ниво проследява две метрики:
- Concurrency: колко requests се изпълняват едновременно.
- RPM: колко requests сте изпратили през последните 60 секунди.
Rate Limit Responses
Когато достигнете лимит, API връща JSON response с текущото ви потребление и действащите лимити.
429: RPM Exceeded
{
"error": "Rate limit exceeded",
"status": 429,
"service": "single",
"retryAfter": 5,
"current": {
"concurrency": 12,
"rpm": 3000
},
"limits": {
"maxConcurrency": 500,
"maxRpm": 3000
}
}
Изпратили сте твърде много requests през последната минута. Изчакайте периода retryAfter, преди да изпратите още.
503: Concurrency Exceeded
{
"error": "Service at capacity",
"status": 503,
"service": "proxy",
"retryAfter": 2,
"current": {
"concurrency": 500,
"rpm": 1200
},
"limits": {
"maxConcurrency": 500,
"maxRpm": 3000
}
}
Твърде много requests се изпълняват едновременно. Някои от предишните ви requests все още не са завършили.
Service Disabled
Когато дадена услуга е временно спряна за поддръжка, API връща 503 с различно съобщение за грешка:
{
"error": "Service disabled",
"status": 503,
"retryAfter": 60
}
Това не е rate limit. Услугата е временно недостъпна. Проверете стойността на retryAfter и опитайте отново след съответния брой секунди. Това обикновено се разрешава в рамките на няколко минути.
Не бъркайте това с 503 за concurrency. Отговор "Service disabled" няма да включва полетата current или limits.
Response Fields
| Поле | Тип | Описание |
|---|---|---|
error |
string | Човешки четимо съобщение за грешка |
status |
number | HTTP статус код (429 или 503) |
service |
string | Коя услуга е достигнала лимита: single, proxy, browser или api |
retryAfter |
number | Препоръчително време за изчакване в секунди преди нов опит |
current.concurrency |
number | Текущият ви брой активни requests |
current.rpm |
number | Вашите requests през последните 60 секунди |
limits.maxConcurrency |
number | Максимално разрешен брой едновременни requests |
limits.maxRpm |
number | Максимално разрешен брой requests в минута |
Handling Rate Limits
Използвайте полето retryAfter, за да внедрите 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")
Съвети
- Проверявайте полетата
currentв rate limit responses, за да разберете моделите си на потребление. - Ако постоянно достигате лимитите за concurrency, намалете броя на паралелните requests.
- Ако достигате лимитите за RPM, добавете малко закъснение между requests или ги групирайте в по-голям времеви прозорец.
- Стойността на
retryAfterварира в зависимост от типа лимит: 2 секунди за concurrency, 5 секунди за RPM. - Отговор "Service disabled" означава, че се извършва поддръжка. Не продължавайте да натоварвате endpoint.
Свързани теми
- API Endpoints: Пълен справочник за параметрите
- Error Handling: Всички типове грешки и отговори
- Troubleshooting: Често срещани проблеми и решения