Ответ
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"})