fastapi

FastAPI Core Knowledge

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 "fastapi" with this command: npx skills add claude-dev-suite/claude-dev-suite/claude-dev-suite-claude-dev-suite-fastapi

FastAPI Core Knowledge

Full Reference: See advanced.md for WebSocket integration including connection management, authentication, room management, Pydantic message protocols, heartbeat, Redis pub/sub scaling, and background tasks.

Deep Knowledge: Use mcp__documentation__fetch_docs with technology: fastapi for comprehensive documentation.

Basic Setup

from fastapi import FastAPI, HTTPException, Depends from pydantic import BaseModel, EmailStr

app = FastAPI(title="My API")

class UserCreate(BaseModel): name: str email: EmailStr

class User(UserCreate): id: int

class Config:
    from_attributes = True

Route Patterns

@app.get("/users", response_model=list[User]) async def get_users(skip: int = 0, limit: int = 100): return await db.users.find_many(skip=skip, limit=limit)

@app.get("/users/{user_id}", response_model=User) async def get_user(user_id: int): user = await db.users.find(user_id) if not user: raise HTTPException(status_code=404, detail="User not found") return user

@app.post("/users", response_model=User, status_code=201) async def create_user(user: UserCreate): return await db.users.create(user.model_dump())

Dependency Injection

async def get_db(): db = SessionLocal() try: yield db finally: db.close()

async def get_current_user(token: str = Depends(oauth2_scheme)): user = await verify_token(token) if not user: raise HTTPException(status_code=401, detail="Invalid token") return user

@app.get("/me", response_model=User) async def get_me(user: User = Depends(get_current_user)): return user

Key Features

  • Auto OpenAPI/Swagger docs at /docs

  • Pydantic validation

  • Async support

  • Type hints everywhere

When NOT to Use This Skill

  • Django projects - Django has its own ORM, admin, templates

  • Flask microservices - Flask is lighter without type validation overhead

  • Synchronous WSGI apps - FastAPI is async-first

  • Legacy Python 2.x - FastAPI requires Python 3.7+

  • Non-REST APIs - Use dedicated GraphQL or gRPC frameworks

Anti-Patterns

Anti-Pattern Why It's Bad Solution

def instead of async def

Blocks event loop Use async def for I/O operations

Missing response_model

No output validation Always specify response_model

Sync database calls Blocks workers Use async drivers (asyncpg, motor)

Global state without locks Race conditions Use asyncio.Lock or Depends()

Raising exceptions without HTTPException Generic 500 errors Use HTTPException with status codes

No input validation Security vulnerabilities Use Pydantic models with validators

Quick Troubleshooting

Problem Diagnosis Fix

"RuntimeError: no running event loop" Calling async from sync code Use await or asyncio.run()

Validation errors not clear Missing field descriptions Add Field(description=...)

Slow response times Sync database calls Switch to async SQLAlchemy

CORS errors in browser Missing middleware Add CORSMiddleware

Dependency not injected Wrong import or syntax Check Depends() syntax

Production Readiness

Security Configuration

from fastapi.middleware.cors import CORSMiddleware from slowapi import Limiter

app = FastAPI( title="My API", docs_url="/docs" if os.getenv("ENV") != "production" else None, )

limiter = Limiter(key_func=get_remote_address) app.state.limiter = limiter

app.add_middleware( CORSMiddleware, allow_origins=os.getenv("ALLOWED_ORIGINS", "").split(","), allow_credentials=True, allow_methods=["GET", "POST", "PUT", "DELETE", "PATCH"], allow_headers=["*"], )

Health Checks

@app.get("/health") async def health(): return {"status": "healthy"}

@app.get("/ready") async def readiness(db: Session = Depends(get_db)): try: db.execute("SELECT 1") return {"status": "ready", "database": "connected"} except Exception: return JSONResponse(status_code=503, content={"status": "not ready"})

Graceful Shutdown

from contextlib import asynccontextmanager

@asynccontextmanager async def lifespan(app: FastAPI): await database.connect() yield await database.disconnect()

app = FastAPI(lifespan=lifespan)

Monitoring Metrics

Metric Alert Threshold

Request latency p99

500ms

Error rate (5xx)

1%

Memory usage

80%

Worker utilization

90%

Checklist

  • CORS properly configured

  • Rate limiting enabled

  • Security headers middleware

  • Pydantic validation on all inputs

  • Health/readiness/liveness endpoints

  • Structured logging (JSON format)

  • Global exception handler

  • Secrets via environment variables

  • Docs disabled in production

  • Gunicorn with multiple workers

  • Graceful shutdown handling

Reference Documentation

  • Pydantic Models

  • Dependencies

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

Skill Exporter

Export Clawdbot skills as standalone, deployable microservices. Use when you want to dockerize a skill, deploy it to Railway or Fly.io, or create an independent API service. Generates Dockerfile, FastAPI wrapper, requirements.txt, deployment configs, and optional LLM client integration.

Registry SourceRecently Updated
1.7K1Profile unavailable
Coding

FastAPI Production Engineering

Build, deploy, and scale production-grade FastAPI apps with async, type-safe design, structured errors, JWT auth, async ORM, auto docs, tests, and observabil...

Registry SourceRecently Updated
3290Profile unavailable
Coding

fastapi

No summary provided by upstream source.

Repository SourceNeeds Review