FastAPI автоматически определяет: если параметр есть в пути {} — это path param, иначе — query param.
Path параметры
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/users/{user_id}")
def get_user(user_id: int):
return {"user_id": user_id}
# С валидацией
@app.get("/items/{item_id}")
def get_item(item_id: int = Path(ge=1, le=1000)):
return {"item_id": item_id}
Тип аннотация автоматически:
- Конвертирует строку из URL в нужный тип
- Валидирует значение
- Документирует в Swagger
Query параметры
from fastapi import Query
@app.get("/tasks/")
def list_tasks(
status: str | None = None, # опциональный
priority: int = 1, # с дефолтом
q: str | None = Query(None, min_length=3), # с валидацией
limit: int = Query(20, ge=1, le=100),
):
return {"status": status, "priority": priority, "q": q}
GET /tasks/?status=todo&priority=3&limit=10
Несколько значений
from typing import List
@app.get("/tasks/")
def list_tasks(tags: List[str] = Query([])):
return {"tags": tags}
# GET /tasks/?tags=python&tags=django
Enum параметры
from enum import Enum
class TaskStatus(str, Enum):
todo = "todo"
in_progress = "in_progress"
done = "done"
@app.get("/tasks/")
def list_tasks(status: TaskStatus | None = None):
return {"status": status}
Смешанные параметры
@app.get("/projects/{project_id}/tasks/")
def list_project_tasks(
project_id: int, # path
status: str | None = None, # query
limit: int = 20, # query
):
return {
"project_id": project_id,
"status": status,
"limit": limit,
}
FastAPI автоматически определяет: если параметр есть в пути {} — это path param, иначе — query param.
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!