Ответ
FastAPI построен на нескольких ключевых паттернах, но два основных — это:
-
Внедрение зависимостей (Dependency Injection, DI)
- Назначение: Управление ресурсами (сессии БД, аутентификация) и переиспользование общей логики.
- Реализация: Через функцию
Depends
.
from fastapi import Depends, FastAPI app = FastAPI() # Зависимость, которую можно переиспользовать async def common_parameters(q: str | None = None, skip: int = 0, limit: int = 100): return {"q": q, "skip": skip, "limit": limit} @app.get("/items/") async def read_items(commons: dict = Depends(common_parameters)): return commons
-
Объект передачи данных (Data Transfer Object, DTO)
- Назначение: Валидация, сериализация и документирование данных запроса и ответа.
- Реализация: С помощью моделей Pydantic.
from pydantic import BaseModel # Модель Pydantic выступает в роли DTO class Item(BaseModel): name: str price: float is_offer: bool | None = None @app.post("/items/") async def create_item(item: Item): # FastAPI автоматически валидирует тело запроса по схеме Item return item
Сочетание этих двух паттернов обеспечивает высокую производительность, надежность и удобство разработки в FastAPI.