← Back to Tutorials
31. Sub-Applications
from fastapi import FastAPI, APIRouter
app = FastAPI()
# Create sub-app
subapp = FastAPI(title="Sub API")
@subapp.get("/sub/items/")
def sub_items():
return {"message": "This is the sub-app"}
# Mount sub-app at prefix
app.mount("/sub", subapp)
# Using APIRouter (better for organizing)
router = APIRouter(prefix="/api/v1", tags=["v1"])
@router.get("/items/")
def v1_items():
return {"version": "v1", "items": []}
@router.get("/users/")
def v1_users():
return {"version": "v1", "users": []}
app.include_router(router)
# Versioning example
v2_router = APIRouter(prefix="/api/v2", tags=["v2"])
@v2_router.get("/items/")
def v2_items():
return {"version": "v2", "items": [], "new_field": "extended"}
app.include_router(v2_router)
Mounting Starlette Apps
from starlette.applications import Starlette
starlette_app = Starlette()
# ... configure starlette_app
app.mount("/starlette", starlette_app)
✏️ Exercise: Create a main app with two versioned routers (v1 and v2). Each has /items and /users endpoints but v2 returns additional fields.