Good Code
The good version makes app creation a composition point and leaves feature routes in their own modules.
Lesson 10
Organize feature routers and keep app creation focused on wiring rather than route implementation.
from fastapi import FastAPI
from app.api import health, reviews, users
def create_app():
app = FastAPI(title="Review API")
app.include_router(health.router)
app.include_router(users.router, prefix="/users", tags=["users"])
app.include_router(reviews.router, prefix="/reviews", tags=["reviews"])
return app
app = create_app()from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}")
async def read_user(user_id: int):
return await users.find(user_id)
@app.post("/reviews/{review_id}/approve")
async def approve_review(review_id: int):
review = await reviews.find(review_id)
await notifications.send(review.author_email)
return await reviews.approve(review_id)The good version makes app creation a composition point and leaves feature routes in their own modules.
The bad version turns main.py into a mix of app setup, route definitions, business flow, and side effects.