Що таке 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, бо саме він визначає, як буде оброблено запит.
Більше цікавих новин
Игровая механика – что это?
Кому не варто йти до ІТ?
Як використовувати Docker під час розробки програмного забезпечення?
Python і аналітика даних: що треба знати та приклад проекту