Статус HTTP_429_TOO_MANY_REQUESTS
Статус HTTP_429_TOO_MANY_REQUESTS применяется для ограничения частоты запросов (rate limiting).
Когда клиент превышает допустимое количество запросов, сервер возвращает этот статус и,
как правило, заголовок Retry-After с указанием времени, через которое можно повторить запрос.
В FastAPI статус используется через импорт из модуля fastapi.status или через импорт
константы HTTP_429_TOO_MANY_REQUESTS из модуля starlette.status.
Числовое значение статуса - 429.
Синтаксис
from fastapi import status
status.HTTP_429_TOO_MANY_REQUESTS
Также константу можно импортировать напрямую:
from starlette.status import HTTP_429_TOO_MANY_REQUESTS
Пример
Давайте вернём статус 429, если клиент превысил лимит запросов:
from fastapi import FastAPI, HTTPException, status
app = FastAPI()
request_count = {}
LIMIT = 3
@app.get('/data')
def get_data(user: str):
count = request_count.get(user, 0) + 1
request_count[user] = count
if count > LIMIT:
raise HTTPException(
status_code=status.HTTP_429_TOO_MANY_REQUESTS,
detail='Too many requests'
)
return {'count': count, 'limit': LIMIT}
Результат выполнения кода для адреса /data?user=abcde при четвёртом запросе:
{"detail": "Too many requests"}
Пример
Давайте добавим заголовок Retry-After, чтобы клиент знал,
через сколько секунд можно повторить запрос:
Результат выполнения кода для адреса /article?user=abcde при четвёртом запросе:
{"detail": "Too many requests"}
Смотрите также
-
статус
HTTP_403_FORBIDDEN,
который сообщает об отказе в доступе -
статус
HTTP_401_UNAUTHORIZED,
который требует аутентификации клиента -
статус
HTTP_400_BAD_REQUEST,
который сообщает о некорректном запросе -
модуль
status,
который содержит все HTTP-статусы