Routing & Endpoints

FastAPI строит роутинг поверх Starlette. Каждый эндпоинт — это обычная async def функция с декоратором, где HTTP-метод и путь задаются явно.

Минимальный эндпоинт

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "hello"}

Path-параметры

Объявляются прямо в URL фигурными скобками, типизация работает автоматически:

@app.get("/users/{user_id}")
async def get_user(user_id: int):
    return {"user_id": user_id}

Невалидный тип (/users/abc) даст 422 с понятным описанием ещё до тела функции — валидация встроена.

Query-параметры

Любой аргумент функции, не объявленный в path, становится query-параметром:

@app.get("/search")
async def search(q: str, limit: int = 20, offset: int = 0):
    return {"q": q, "limit": limit, "offset": offset}

/search?q=fastapi — limit и offset примут дефолты.

Response model

response_model задаёт схему ответа, отсекает лишние поля и улучшает OpenAPI:

from pydantic import BaseModel

class UserOut(BaseModel):
    id: int
    name: str

@app.get("/users/{user_id}", response_model=UserOut)
async def get_user(user_id: int):
    return {"id": user_id, "name": "Alice", "internal_secret": "x"}

internal_secret не попадёт в ответ — Pydantic отфильтрует.

Связанные заметки