Organise routes into APIRouter modules with prefix, tags, and shared dependencies.
APIRouter — Modular Apps
# routers/users.py
from fastapi import APIRouter, Depends, HTTPException
from ..dependencies import get_db, get_current_user
router = APIRouter(
prefix="/users",
tags=["users"],
dependencies=[Depends(get_current_user)],
)
@router.get("/", response_model=list[UserResponse])
def list_users(db: Session = Depends(get_db)):
return db.query(User).all()
@router.get("/{id}", response_model=UserResponse)
def get_user(id: int, db: Session = Depends(get_db)):
return db.get(User, id) or HTTPException(404, "Not found")
@router.post("/", response_model=UserResponse, status_code=201)
def create_user(user: UserCreate, db: Session = Depends(get_db)):
return crud.create_user(db, user)
# main.py
from routers import users, posts, auth
app = FastAPI()
app.include_router(auth.router, prefix="/auth", tags=["auth"])
app.include_router(users.router, prefix="/users", tags=["users"])
app.include_router(posts.router, prefix="/posts", tags=["posts"])