python-fastapi-patterns

Modern async API development with FastAPI.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "python-fastapi-patterns" with this command: npx skills add 0xdarkmatter/claude-mods/0xdarkmatter-claude-mods-python-fastapi-patterns

FastAPI Patterns

Modern async API development with FastAPI.

Basic Application

from fastapi import FastAPI from contextlib import asynccontextmanager

@asynccontextmanager async def lifespan(app: FastAPI): """Application lifespan - startup and shutdown.""" # Startup app.state.db = await create_db_pool() yield # Shutdown await app.state.db.close()

app = FastAPI( title="My API", version="1.0.0", lifespan=lifespan, )

@app.get("/") async def root(): return {"message": "Hello World"}

Request/Response Models

from pydantic import BaseModel, Field, EmailStr from datetime import datetime

class UserCreate(BaseModel): """Request model with validation.""" name: str = Field(..., min_length=1, max_length=100) email: EmailStr age: int = Field(..., ge=0, le=150)

class UserResponse(BaseModel): """Response model.""" id: int name: str email: EmailStr created_at: datetime

model_config = {"from_attributes": True}  # Enable ORM mode

@app.post("/users", response_model=UserResponse, status_code=201) async def create_user(user: UserCreate): db_user = await create_user_in_db(user) return db_user

Path and Query Parameters

from fastapi import Query, Path from typing import Annotated

@app.get("/users/{user_id}") async def get_user( user_id: Annotated[int, Path(..., ge=1, description="User ID")], ): return await fetch_user(user_id)

@app.get("/users") async def list_users( skip: Annotated[int, Query(ge=0)] = 0, limit: Annotated[int, Query(ge=1, le=100)] = 10, search: str | None = None, ): return await fetch_users(skip=skip, limit=limit, search=search)

Dependency Injection

from fastapi import Depends from typing import Annotated

async def get_db(): """Database session dependency.""" async with async_session() as session: yield session

async def get_current_user( token: Annotated[str, Depends(oauth2_scheme)], db: Annotated[AsyncSession, Depends(get_db)], ) -> User: """Authenticate and return current user.""" user = await authenticate_token(db, token) if not user: raise HTTPException(status_code=401, detail="Invalid token") return user

Annotated types for reuse

DB = Annotated[AsyncSession, Depends(get_db)] CurrentUser = Annotated[User, Depends(get_current_user)]

@app.get("/me") async def get_me(user: CurrentUser): return user

Exception Handling

from fastapi import HTTPException from fastapi.responses import JSONResponse

Built-in HTTP exceptions

@app.get("/items/{item_id}") async def get_item(item_id: int): item = await fetch_item(item_id) if not item: raise HTTPException(status_code=404, detail="Item not found") return item

Custom exception handler

class ItemNotFoundError(Exception): def init(self, item_id: int): self.item_id = item_id

@app.exception_handler(ItemNotFoundError) async def item_not_found_handler(request, exc: ItemNotFoundError): return JSONResponse( status_code=404, content={"detail": f"Item {exc.item_id} not found"}, )

Router Organization

from fastapi import APIRouter

users.py

router = APIRouter(prefix="/users", tags=["users"])

@router.get("/") async def list_users(): return []

@router.get("/{user_id}") async def get_user(user_id: int): return {"id": user_id}

main.py

from app.routers import users, items

app.include_router(users.router) app.include_router(items.router, prefix="/api/v1")

Quick Reference

Feature Usage

Path param @app.get("/items/{id}")

Query param def f(q: str = None)

Body def f(item: ItemCreate)

Dependency Depends(get_db)

Auth Depends(get_current_user)

Response model response_model=ItemResponse

Status code status_code=201

Additional Resources

  • ./references/dependency-injection.md

  • Advanced DI patterns, scopes, caching

  • ./references/middleware-patterns.md

  • Middleware chains, CORS, error handling

  • ./references/validation-serialization.md

  • Pydantic v2 patterns, custom validators

  • ./references/background-tasks.md

  • Background tasks, async workers, scheduling

Scripts

  • ./scripts/scaffold-api.sh
  • Generate API endpoint boilerplate

Assets

  • ./assets/fastapi-template.py
  • Production-ready FastAPI app skeleton

See Also

Prerequisites:

  • python-typing-patterns

  • Pydantic models and type hints

  • python-async-patterns

  • Async endpoint patterns

Related Skills:

  • python-database-patterns

  • SQLAlchemy integration

  • python-observability-patterns

  • Logging, metrics, tracing middleware

  • python-pytest-patterns

  • API testing with TestClient

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

python-pytest-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

python-async-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

python-env

No summary provided by upstream source.

Repository SourceNeeds Review