Что такое Rate лимиты
t.me/qa_chillout
Rate limits (лимиты запросов) — это ограничения на количество запросов, которые можно отправить к сервису (например, API или серверу) за определённый промежуток времени.
Зачем нужны Rate лимиты
- Защита от перегрузки
Без ограничений любой пользователь или скрипт может засыпать сервис тысячами запросов в секунду. Это приведёт к перегрузке серверов, задержкам в ответах или полной недоступности системы. Rate лимиты позволяют поддерживать стабильную работу.
- Защита от атак (DDoS, brute force)
Злоумышленники могут пытаться перегрузить сервис или подобрать пароли с помощью автоматизированных запросов. Лимиты помогают снижать риск и ограничивают такие сценарии.
- Справедливое распределение ресурсов
В многопользовательских системах важно, чтобы один клиент не «съел» все мощности. Ограничение числа запросов гарантирует равные условия доступа для всех.
- Контроль тарифов и монетизация
В API-сервисах часто есть бесплатный тариф с ограничением запросов (например, 1000 запросов в месяц). Это позволяет регулировать использование и стимулировать переход на платные планы.
- Оптимизация инфраструктуры
Благодаря лимитам сервер предсказуемо выдерживает нагрузку. Это помогает точнее планировать ресурсы: количество серверов, баз данных, очередей сообщений.
- Защита от парсеров и скриптов
Автоматические парсеры могут нагружать сервис и собирать данные без ограничений. Rate лимиты снижают такие риски и дополняют другие меры — капчу, авторизацию, контроль активности.
Где встречаются
Rate лимиты встречаются в самых разных системах. В первую очередь это API (REST, GraphQL, gRPC), где лимиты ограничивают количество запросов от одного клиента за определённое время.
В веб-сервисах — например, при регистрации, авторизации или массовой отправке форм, чтобы защититься от спама и автоматических атак.
Важно учитывать лимиты и в интеграциях: платёжные шлюзы, социальные сети или сторонние сервисы почти всегда ограничивают интенсивность обращений.
Наконец, лимиты действуют и в ботах и мессенджерах (Telegram, Slack, Discord), где они предотвращают перегрузку платформы и не позволяют злоупотреблять массовой рассылкой сообщений.
Как выглядят лимиты
Rate лимиты всегда задаются в формате «количество запросов за единицу времени».
Наиболее распространённые варианты:
- 100 запросов в минуту
→ можно отправить не более 100 запросов за 60 секунд.
- 1000 запросов в час
→ если лимит исчерпан, сервер начнёт отклонять запросы до следующего часа.
- 10 запросов в секунду
→ обычно используется для высоконагруженных систем, где важно контролировать мгновенный поток запросов.
Что происходит при превышении лимита
Когда клиент отправляет больше запросов, чем разрешено, сервер возвращает ошибку:
- HTTP-статус: 429 Too Many Requests
- Часто в ответ добавляется заголовок:
Retry-After: 30
- Это значит, что повторить запрос можно через 30 секунд.
Как тестировать rate лимиты
При тестировании rate лимитов важно обращать внимание на несколько моментов.
1. Нужно проверить, правильно ли считается лимит — учитываются ли запросы по секунде, минуте, часу или по скользящему окну (sliding window (например: 100 запросов за 60 секунд.), т.е лимит считается за последние N секунд/минут от текущего момента.).
2. Также важно понимать, есть ли разница для авторизованных и неавторизованных пользователей: часто для залогиненных клиентов лимиты мягче. При превышении лимита сервер должен возвращать именно 429 Too Many Requests, а не «500» или другие коды ошибок.
3. Отдельное внимание стоит уделить заголовку Retry-After: он должен присутствовать и корректно указывать время ожидания. QA стоит проверить, что лимит действительно сбрасывается после указанного интервала, а также как система ведёт себя при массовых параллельных запросах от разных потоков или пользователей. Важно удостовериться, что при достижении лимита не ломаются основные бизнес-фичи, например, корзина в интернет-магазине остаётся в рабочем состоянии.
Чек-лист проверки rate лимитов
- Отправить серию запросов и убедиться, что при достижении установленного лимита сервер начинает возвращать 429 Too Many Requests.
- Дождаться времени, указанного в заголовке Retry-After, и убедиться, что после этого сервер снова принимает запросы.
- Отправлять запросы с равными интервалами и проверить, что лимит не срабатывает раньше установленного времени.
- Выполнить запросы от разных пользователей или с разными токенами и проверить, что для каждого клиента лимит считается отдельно.
Обсудить статью, узнать больше можно в телеграм канале «Тестировщики нужны».