Ответ
FastAPI использует декораторы для привязки HTTP-запросов к функциям-обработчикам. В основе лежит Starlette, который обеспечивает высокопроизводительную маршрутизацию.
Ключевой принцип: Декоратор @app.<method>("/path") связывает HTTP-метод (GET, POST и т.д.) и URL-путь с асинхронной или синхронной функцией.
Пример:
from fastapi import FastAPI
from typing import Optional
app = FastAPI()
# 1. Параметр пути (path parameter)
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Optional[str] = None):
# item_id - обязательный параметр из URL
# q - опциональный query-параметр (?q=...)
return {"item_id": item_id, "q": q}
# 2. POST-запрос с телом (request body)
@app.post("/items/")
async def create_item(item: dict):
return {"item_created": item}
Как это работает:
- Декораторы:
@app.get,@app.post,@app.putи т.д. регистрируют функцию для конкретного пути и HTTP-метода. - Тайп-хинтинг: FastAPI использует аннотации типов Python для валидации, сериализации и документирования данных. Например,
item_id: intавтоматически преобразует параметр пути в целое число и вернет ошибку 422, если это невозможно. - Pydantic: Тела запросов (
item: dictили, что лучше, модель Pydantic) автоматически парсятся из JSON и валидируются. - APIRouter: Для структурирования больших приложений маршруты можно группировать с помощью
APIRouterи подключать к основному приложению. - Авто-документация: На основе этих маршрутов и моделей данных FastAPI автоматически генерирует интерактивную документацию OpenAPI (Swagger UI) и ReDoc.