Difficulty: Intermediate
How do you organize a large FastAPI application using APIRouter?
`APIRouter` is a mini-application that groups related routes. It works exactly like the `FastAPI` app instance but is included into the main app with `app.include_router()`.
Benefits: - Split routes into multiple files/modules - Apply shared prefix, tags, dependencies, and responses to all routes in the router - Keep each domain area (users, items, orders) in separate files
Typical structure: ``` app/ main.py # FastAPI instance, includes routers routers/ users.py # APIRouter for /users items.py # APIRouter for /items models/ # Pydantic models database.py # DB setup ```
# routers/users.py
from fastapi import APIRouter, Depends
router = APIRouter(
prefix="/users",
tags=["users"],
responses={404: {"description": "Not found"}}
)
@router.get("/")
def list_users():
return [{"id": 1, "name": "Alice"}]
@router.get("/{user_id}")
def get_user(user_id: int):
return {"id": user_id, "name": "Alice"}
# main.py
from fastapi import FastAPI
from routers import users, items
app = FastAPI()
app.include_router(users.router)
app.include_router(items.router, prefix="/api/v1") # override prefix
APIRouter, modular structure, prefix, tags