You declare a Pydantic model and use it as the type of a path operation parameter, and FastAPI treats that parameter as the request body.
from pydantic import BaseModel
from fastapi import FastAPI
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool = False
@app.post("/items/")
def create_item(item: Item):
return {"item_name": item.name, "item_price": item.price}
FastAPI reads the body as JSON, converts each field to its declared type and validates it. It then hands you an Item instance with editor completion on every field. If the data is invalid, FastAPI returns a 422 response before your function runs. Its detailed error messages name each bad field and say what was wrong.
FastAPI decides where each parameter comes from. A name that appears in the path is a path parameter. A single type such as int or str is a query parameter, and a Pydantic model is the body.
Fields with a default, such as is_offer, are optional in the JSON. The model also becomes a JSON Schema in the generated OpenAPI docs.
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓