Короткий ответ
Rate limiting — это ограничение количества запросов от одного клиента за промежуток времени для защиты сервиса от перегрузки и злоупотреблений; при превышении лимита сервер обычно отвечает статусом 429 Too Many Requests с заголовком Retry-After.
Как это работает подробнее
Сервер (или прокси/API-gateway перед ним) считает количество запросов от идентификатора клиента (IP, API-ключ, user id) за окно времени и отклоняет запросы сверх установленного порога, не передавая их в основную бизнес-логику.
Пример кода
request.http
HTTP/1.1 429 Too Many Requests
Retry-After: 30
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
{"error": "rate limit exceeded, retry after 30 seconds"}Что использовать на практике
- Практика. Лимиты стоит делать отдельными для разных типов операций (например, чтение и создание ресурсов) и возвращать клиенту заголовки с текущим состоянием лимита (X-RateLimit-Remaining, Retry-After), чтобы клиент мог корректно повторить запрос позже.
Подводные камни
- Риск. Ограничивают только по IP, что ломается за NAT или CDN (много пользователей — один IP) и обходится через множество IP у атакующего; не возвращают понятный статус и заголовки, из-за чего клиенты не понимают, что делать при отказе.