РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
158 of 307 menu

Статус 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, чтобы клиент знал, через сколько секунд можно повторить запрос:

<+python+> from fastapi import FastAPI, HTTPException, status from fastapi.responses import JSONResponse app = FastAPI() request_count = {} LIMIT = 3 @app.get('/article') def get_article(user: str): count = request_count.get(user, 0) + 1 request_count[user] = count if count > LIMIT: return JSONResponse( status_code=status.HTTP_429_TOO_MANY_REQUESTS, content={'detail': 'Too many requests'}, headers={'Retry-After': '60'} ) return {'count': count, 'limit': LIMIT} <-python+>

Результат выполнения кода для адреса /article?user=abcde при четвёртом запросе:

{"detail": "Too many requests"}

Смотрите также

  • статус HTTP_403_FORBIDDEN,
    который сообщает об отказе в доступе
  • статус HTTP_401_UNAUTHORIZED,
    который требует аутентификации клиента
  • статус HTTP_400_BAD_REQUEST,
    который сообщает о некорректном запросе
  • модуль status,
    который содержит все HTTP-статусы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить