← Назад к вопросам

Как работает Middleware?

2.0 Middle🔥 251 комментариев
#FastAPI и Flask#Архитектура и паттерны

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как работает Middleware?

Middleware — это компонент, который обрабатывает запросы и ответы веб-приложения. Это один из основных паттернов в веб-фреймворках на Python (FastAPI, Django, Flask).

Концепция работы

Middleware работает как цепочка обработчиков (chain of responsibility). Запрос проходит через несколько слоёв middleware перед попаданием в основной обработчик, а ответ проходит обратный путь:

Request → Middleware 1 → Middleware 2 → Handler → Response → Middleware 2 → Middleware 1 → Client

Примеры middleware

1. CORS Middleware — разрешает кросс-доменные запросы:

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"],
)

2. Authentication Middleware — проверяет JWT токен:

from fastapi import Request
from starlette.middleware.base import BaseHTTPMiddleware

class AuthMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request: Request, call_next):
        token = request.headers.get("Authorization")
        if not token:
            return {"error": "Unauthorized"}
        request.state.user_id = decode_token(token)
        response = await call_next(request)
        return response

3. Logging Middleware — логирует все запросы:

class LoggingMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request: Request, call_next):
        print(f"Request: {request.method} {request.url}")
        response = await call_next(request)
        print(f"Response status: {response.status_code}")
        return response

Порядок регистрации middleware

Это важно! Middleware регистрируются в обратном порядке выполнения:

app.add_middleware(LoggingMiddleware)      # Выполнится ВТОРЫМ
app.add_middleware(AuthMiddleware)         # Выполнится ПЕРВЫМ

Первый добавленный middleware будет выполнен последним в цепи (как стек).

Django Middleware

В Django работает по тому же принципу, но с другим синтаксисом:

class CustomMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # До обработки запроса
        response = self.get_response(request)
        # После обработки
        return response

Ключевые особенности

  1. Асинхронность — middleware в современных фреймворках часто асинхронные для лучшей производительности
  2. Сложность обработки — can modify request/response, access database, redirect
  3. Performance — middleware выполняется для КАЖДОГО запроса, поэтому важна оптимизация
  4. Exception handling — middleware может перехватывать и обрабатывать исключения

Middleware — это мощный механизм для кроссавтинга и обработки общей логики приложения.

Как работает Middleware? | PrepBro