← Back to Tutorials

11. Parameter Validation

from fastapi import FastAPI, Query, Path

app = FastAPI()

# Query parameter validation
@app.get("/items/")
def read_items(
    q: str = Query(None, min_length=3, max_length=50),
    price: float = Query(..., gt=0, le=1000)
):
    return {"q": q, "price": price}

# Path parameter validation
@app.get("/items/{item_id}")
def read_item(
    item_id: int = Path(..., ge=1, title="Item ID")
):
    return {"item_id": item_id}

# String patterns (regex)
@app.get("/users/")
def search_users(
    code: str = Query(..., regex="^[A-Z]{3}\\d{3}$")
):
    return {"code": code}

# Multiple constraints
@app.get("/products/")
def list_products(
    page: int = Query(1, ge=1),
    size: int = Query(10, ge=1, le=100),
    sort: str = Query("name", regex="^(name|price|date)$")
):
    return {"page": page, "size": size, "sort": sort}
✏️ Exercise: Create an endpoint with a path param user_id (>= 1) and a query param email (valid email regex pattern). Test validation errors in Swagger.