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

Какой паттерн проектирования есть в middleware?

1.8 Middle🔥 141 комментариев
#Архитектура и паттерны

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

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

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

Паттерны проектирования в Middleware

Middleware реализует несколько паттернов, основной из которых — Цепочка ответственности (Chain of Responsibility).

Chain of Responsibility

Это структурный паттерн, где запрос передаётся по цепочке обработчиков. Каждый middleware может:

  • Обработать запрос
  • Передать его следующему обработчику
  • Изменить ответ

Пример в Django:

class RequestLogMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
    
    def __call__(self, request):
        print(f"Incoming: {request.method} {request.path}")
        response = self.get_response(request)  # Передача цепочке
        print(f"Status: {response.status_code}")
        return response

Decorator (Декоратор)

Можно трактовать как Decorator паттерн — middleware оборачивает функцию обработчика:

def auth_middleware(func):
    def wrapper(request):
        if not request.user.is_authenticated:
            return HttpResponse("Unauthorized", status=401)
        return func(request)
    return wrapper

@auth_middleware
def my_view(request):
    return HttpResponse("OK")

Pipeline / Decorator Pattern Combo

В современных фреймворках (FastAPI) используется Pipeline паттерн — последовательная обработка через декораторы:

from fastapi import FastAPI

app = FastAPI()

@app.middleware("http")
async def logging_middleware(request, call_next):
    print(f"Start: {request.url}")
    response = await call_next(request)
    print(f"End: {response.status_code}")
    return response

Ключевые характеристики

  • Цепочка объектов — каждый middleware передаёт управление следующему
  • Разделение ответственности — логирование, аутентификация, валидация отделены друг от друга
  • Гибкость — легко добавлять/убирать обработчики
  • Прозрачность — основной код не знает о middleware

Практический порядок выполнения

Мiddleware выполняется слой за слоем (как матрёшка):

Request → Middleware1 → Middleware2 → View → Middleware2 → Middleware1 → Response

Это позволяет контролировать как входящий запрос, так и исходящий ответ.