
FastAPI
Learn the fundamentals of multiple responses in FastAPI.
Endpoints often return different response types depending on success or failure conditions. FastAPI allows you to document multiple response models with different status codes, improving API clarity.
In this section, you'll understand:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Union
app = FastAPI()
class Item(BaseModel):
id: int
name: str
class ErrorResponse(BaseModel):
error: str
@app.get(
"/items/{item_id}",
response_model=Item,
responses={
200: {"model": Item},
404: {"model": ErrorResponse}
}
)
async def get_item(item_id: int):
if item_id < 1:
raise HTTPException(status_code=404, detail="Item not found")
return {"id": item_id, "name": "Widget"}@app.get("/search", response_model=Union[Item, List[Item]])
async def search(q: str):
if q == "all":
return [
{"id": 1, "name": "Item 1"},
{"id": 2, "name": "Item 2"}
]
return {"id": 1, "name": "Item 1"}from fastapi.responses import JSONResponse
@app.post(
"/create",
responses={
201: {"model": Item},
400: {"model": ErrorResponse},
409: {"model": ErrorResponse}
}
)
async def create_item(item: Item):
if item.name == "":
raise HTTPException(400, "Name required")
return JSONResponse(
status_code=201,
content={"id": 1, "name": item.name}
)Ready to explore more? Check out the advanced section for production patterns and edge cases.
Resources
Ojasa Mirai
Master AI-powered development skills through structured learning, real projects, and verified credentials. Whether you're upskilling your team or launching your career, we deliver the skills companies actually need.
Learn Deep • Build Real • Verify Skills • Launch Forward