Що таке 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
- Зміна/фільтрація вхідних даних
- Компресія, кешування, throttle
При правильному використанні middleware дозволяє зменшити дублювання коду, підвищити безпеку і покращити підтримку проєкту. Важливо стежити за порядком підключення middleware, бо саме він визначає, як буде оброблено запит.
Більше цікавих новин
Как работает технология Torrent?
Що таке метапрограмування?
Зачем нужен выделенный сервер? Где его взять?
Лучшие города в США для работы в сфере IT: ТОП-10