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 отфильтрует.
Связанные заметки
- Pydantic validation — как устроены модели
- Dependency Injection —
Dependsдля auth/db