Ответ
Middleware в FastAPI — это функции, которые обрабатывают каждый входящий запрос до его обработки эндпоинтом и каждый исходящий ответ после обработки эндпоинтом. Это предоставляет ряд ключевых преимуществ:
- Централизованная логика: Позволяет реализовать сквозную функциональность (например, логирование, аутентификацию, обработку CORS, сжатие данных) в одном месте для всех или группы эндпоинтов, избегая дублирования кода.
- Гибкость обработки: Middleware может модифицировать как объект запроса (
Request
), так и объект ответа (Response
), позволяя, например, добавлять заголовки, изменять тело ответа или перенаправлять запросы. - Асинхронная работа: Middleware в FastAPI полностью асинхронно, что означает, что оно не блокирует основной поток выполнения приложения и эффективно работает с асинхронными операциями ввода-вывода.
Пример: Добавление CORS Middleware
Для обработки запросов из разных доменов часто используется CORSMiddleware
:
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
# Добавление CORS Middleware для разрешения запросов со всех доменов
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Разрешить все домены
allow_credentials=True, # Разрешить куки и заголовки авторизации
allow_methods=["*"], # Разрешить все HTTP-методы (GET, POST, PUT, DELETE и т.д.)
allow_headers=["*"], # Разрешить все заголовки
)
@app.get("/items/")
async def read_items():
return {"message": "Hello from FastAPI!"}
Использование Middleware значительно упрощает поддержку и масштабирование приложения, делая код более чистым и модульным.