Что такое middleware? Примеры в Express, FastAPI и других фреймворках
Middleware — это важный механизм современных фреймворков. Он помогает обработать дополнительные действия внутри программы. Рассмотрим примеры использования в Express, FastAPI и других системах.
Middleware (промежуточное программное обеспечение) — это промежуточная логика, которая выполняется между получением запроса сервером и возвратом ответа клиенту. В большинстве современных веб-фреймворков middleware используется для реализации таких вещей, как аутентификация, логирование, обработка ошибок, проверка прав доступа, подготовка заголовков или форматирование ответа.
Как это работает на общем уровне?
Когда поступает HTTP-запрос, сервер не обязательно сразу передаёт его главному обработчику (то есть функции, которая формирует ответ). Сначала он может пройти через несколько middleware-функций — каждая из которых либо что-то делает с запросом, либо проверяет, можно ли запросу двигаться дальше. Некоторые middleware могут полностью остановить дальнейшую обработку, например, если токен недействителен.
Middleware в
Express.js — один из самых популярных фреймворков Node.js, и в нём концепция middleware — основа всей архитектуры. Middleware в Express — это функции, которые имеют доступ к объекту запроса (req), объекту ответа (res) и следующей функции в цепочке (next).
Вот базовый пример middleware в Express:
// Простой middleware
function logger(req, res, next) {
console.log(`${req.method} ${req.url}`);
next(); // обязательно вызвать, чтобы передать управление дальше
}
app.use(logger); // применяем middleware глобальноТакие middleware могут быть применены глобально (через app.use), или только к отдельным маршрутам. Во фреймворке middleware выполняется последовательно в порядке, в котором оно было зарегистрировано.
Типы middleware в Express:
- Глобальные (app.use(...))
- Маршрутные (app.get('/path', middleware, handler))
- Обработчики ошибок (с 4-мя параметрами: err, req, res, next)
- Встроенные (например, express.json())
Курс изучения JavaScript
Можете пройти наш бесплатный курс по изучению JavaScript
Middleware в
FastAPI — это фреймворк на Python, который поддерживает асинхронность и типизацию. В нём middleware также выполняется на каждый HTTP-запрос, если оно подключено. Middleware здесь — это функции, которые выполняются до и после того, как запрос дойдёт до основного маршрута.
Вот пример middleware в FastAPI:
from fastapi import FastAPI, Request
from starlette.middleware.base import BaseHTTPMiddleware
app = FastAPI()
# Создание middleware-класса
class LoggerMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
print(f"Запрос: {request.method} {request.url}")
response = await call_next(request) # Передаём запрос дальше
return response
# Добавление middleware в FastAPI
app.add_middleware(LoggerMiddleware)В FastAPI middleware также может выполнять валидацию токенов, логирование, изменять заголовки или перехватывать исключения. Порядок выполнения middleware также имеет значение: первым зарегистрированное — первым и выполняется.
Особенности FastAPI middleware:
- Использует классы на базе
BaseHTTPMiddleware - Поддерживает асинхронные функции
- Позволяет изменять как запрос, так и ответ
Курс изучения Python
Можете пройти наш бесплатный курс по изучению Python
Middleware в других фреймворках
В большинстве современных фреймворков, таких как (PHP), (C#), (Python), Koa (Node.js), существует аналогичная концепция middleware. Хотя реализация отличается, идея одна и та же — это слой между HTTP-запросом и конечной точкой обработки.
Например, в Laravel middleware — это классы, которые можно применять к группам маршрутов или отдельным маршрутам. В Django — это функции или классы, которые оборачивают обработку запроса. В Koa middleware реализовано как стек функций, работающих на основе async/await.
Сравнение: Express, FastAPI, Laravel, Django
| Фреймворк | Тип middleware | Формат |
|---|---|---|
| Express | Функции | function(req, res, next) |
| FastAPI | Классы | class BaseHTTPMiddleware |
| Laravel | Классы | handle($request, Closure $next) |
| Django | Классы или функции | __call__ или process_view() |
Когда использовать middleware
Middleware — идеальный инструмент, когда нужно применить повторяющуюся логику к большому количеству маршрутов. Наиболее типичные сценарии:
- Логирование запросов
- Проверка аутентификации
- Обработка ошибок
- Настройка CORS
- Изменение/фильтрация входящих данных
- Сжатие, кэширование, ограничение частоты запросов
При правильном использовании middleware позволяет сократить дублирование кода, повысить безопасность и улучшить поддержку проекта. Важно следить за порядком подключения middleware, ведь именно он определяет, как будет обработан запрос.
Больше интересных новостей
Как собрать идеальное портфолио программиста в 2025 году
Анализ больших данных с помощью Python: основы для начинающих
OpenBCI: «взлом» мозга через нейрокомпьютерный интерфейс
Проблема специфичности CSS и ключевое слово !important