Какие основные паттерны проектирования используются в FastAPI?

Ответ

FastAPI построен на нескольких ключевых паттернах, но два основных — это:

  1. Внедрение зависимостей (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
  2. Объект передачи данных (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.