Лiмiти запитiв
Зрозумiйте лiмiти запитiв FreeFileTools API та як їх обробляти у вашому додатку.
Лiмiти безкоштовного рiвня
| Лiмiт | Значення |
|---|---|
| Запитiв на годину | 50 |
| Максимальний розмiр файлу на запит | 25 MB |
| Вiкно лiмiту запитiв | Rolling 1 hour |
Лiмiт запитiв застосовується для кожного API Key. Кожен ключ має свiй незалежний лiчильник, який скидається на ковзнiй годиннiй основi.
Коли лiмiти запитiв перевищенi
Коли ви перевищуєте лiмiт запитiв, API повертає вiдповiдь 429 Too Many Requests:
{
"error": "Rate limit exceeded",
"message": "You have exceeded the rate limit of 50 requests per hour. Please try again later.",
"retryAfter": 1742
}Поле retryAfter вказує кiлькiсть секунд очiкування перед наступним запитом.
Заголовки вiдповiдi лiмiту запитiв
Кожна вiдповiдь API мiстить заголовки для вiдстеження використання лiмiту запитiв:
| Заголовок | Опис |
|---|---|
X-RateLimit-Limit | Максимальна кiлькiсть дозволених запитiв на годину (50) |
X-RateLimit-Remaining | Кiлькiсть запитiв, що залишилися в поточному вiкнi |
Retry-After | Секунд очiкування перед повторною спробою (тiльки для вiдповiдей 429) |
Приклад заголовкiв вiдповiдi
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42Поради щодо дотримання лiмiтiв
Перевiряйте залишок запитiв
Вiдстежуйте заголовок X-RateLimit-Remaining, щоб знати, скiльки запитiв у вас залишилося.
Реалiзуйте експоненцiйне вiдступання
Коли отримаєте вiдповiдь 429, зачекайте та повторiть спробу зi зростаючими затримками замiсть бомбардування API.
Кешуйте результати
Якщо ви обробляєте тi самi файли повторно, кешуйте результати локально, щоб уникнути непотрiбних API-викликiв.
Пакетуйте розумно
Для пакетної обробки розподiляйте запити в часi замiсть вiдправки всiх одночасно.
Приклад: Обробка лiмiтiв запитiв у JavaScript
async function apiCall(url, options, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.status === 429) {
const retryAfter = parseInt(response.headers.get("Retry-After") || "60");
console.log(`Rate limited. Waiting ${retryAfter} seconds...`);
await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
continue;
}
return response;
}
throw new Error("Max retries exceeded");
}