Annotated adds metadata to type hints. Used with FastAPI for parameter validation.
1from typing import Annotated2from fastapi import FastAPI, Query, Path, Body3from pydantic import Field45app = FastAPI()67# Query parameters8@app.get("/items/")9async def read_items(10 q: Annotated[str | None, Query(min_length=3, max_length=50)] = None,11 skip: Annotated[int, Query(ge=0)] = 0,12 limit: Annotated[int, Query(ge=1, le=100)] = 10,13):14 return {"q": q, "skip": skip, "limit": limit}1516# Path parameters17@app.get("/items/{item_id}")18async def read_item(19 item_id: An[int, Path(ge=1, le=1000)]20):21 return {"item_id": item_id}2223# Body parameters24@app.put("/items/{item_id}")25async def update_item(26 item_id: int,27 name: Annotated[str, Body(min_length=1)] = "Default",28 price: Annotated[float, Body(gt=0)] = 0.0,29):30 return {"item_id": item_id, "name": name, "price": price}3132# With Pydantic models33from pydantic import BaseModel3435class Item(BaseModel):36 name: str37 price: float = Field(gt=0)3839@app.post("/items/")40async def create_item(item: Annotated[Item, Body()]):41 return item
Benefits: