Перечислите основные модули, входящие в состав фреймворка FastAPI

«Перечислите основные модули, входящие в состав фреймворка FastAPI» — вопрос из категории Библиотеки и модули, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

FastAPI имеет модульную структуру, где каждый компонент отвечает за конкретную задачу. Это делает фреймворк гибким и расширяемым.

Ключевые компоненты:

  • fastapi.FastAPI: Основной класс приложения, который объединяет всю логику, маршрутизацию и конфигурацию.

  • fastapi.params: Классы для декларативного описания и валидации параметров запроса. Позволяют получать данные из разных источников с помощью dependency injection.

    • Path(): для параметров пути (e.g., /items/{item_id}).
    • Query(): для query-параметров (e.g., /items/?q=search).
    • Body(): для данных из тела запроса.
    • Header(), Cookie(): для заголовков и cookie.
  • fastapi.responses: Набор готовых классов для формирования различных HTTP-ответов.

    • JSONResponse: стандартный ответ в формате JSON.
    • HTMLResponse: для возврата HTML-страниц.
    • RedirectResponse: для выполнения перенаправлений.
  • fastapi.security: Утилиты для реализации схем безопасности и аутентификации.

    • OAuth2PasswordBearer: для OAuth2.
    • HTTPBasic: для базовой аутентификации.
  • fastapi.exceptions: Класс HTTPException для удобной генерации HTTP-ошибок с заданным статус-кодом и сообщением.

  • fastapi.encoders.jsonable_encoder: Функция для преобразования сложных типов данных (например, моделей Pydantic или SQLAlchemy) в JSON-совместимый формат.

Пример использования:

from fastapi import FastAPI, Path, HTTPException
from fastapi.responses import JSONResponse
from pydantic import BaseModel

# Основной класс приложения
app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

@app.get("/items/{item_id}")
async def read_item(
    # Использование Path для валидации параметра пути
    item_id: int = Path(..., title="The ID of the item to get", ge=1)
):
    if item_id > 100:
        # Генерация стандартной HTTP-ошибки
        raise HTTPException(status_code=404, detail="Item not found")

    # Использование JSONResponse для ответа
    return JSONResponse(content={"item_id": item_id, "name": "Sample Item"})