# 🐍 CrumbMan: FastAPI Cheatsheet > **Referenz für SnakePy & Gärtner** ## 1. App Routing & Struktur ### Router Definition ```python from fastapi import APIRouter, Depends, HTTPException router = APIRouter( prefix="/api/v1/crumbs", tags=["crumbs"], responses={404: {"description": "Not found"}}, ) @router.get("/") async def read_crumbs(): return [{"name": "Krümel"}] ``` ### Main App Registration ```python # app/main.py from app.routers import crumb_router app.include_router(crumb_router.router) ``` ## 2. Request Handling ### Path & Query Parameters ```python # GET /items/42?q=searchterm @app.get("/items/{item_id}") async def read_item(item_id: int, q: str | None = None): return {"item_id": item_id, "q": q} ``` ### Request Body (Pydantic) ```python from pydantic import BaseModel class Item(BaseModel): name: str price: float is_offer: bool = None @app.post("/items/") async def create_item(item: Item): return item ``` ## 3. Dependency Injection ### Database Session ```python from fastapi import Depends from sqlalchemy.orm import Session from app.deps import get_db @app.get("/users/") async def read_users(db: Session = Depends(get_db)): return db.query(User).all() ``` ### Current User (Auth) ```python from app.deps import get_current_user @app.get("/me") async def read_users_me(current_user: User = Depends(get_current_user)): return current_user ``` ## 4. Responses & Errors ### JSON Response ```python # Automatisch via Return-Wert (dict/list/Pydantic Model) return {"message": "Success"} ``` ### HTTP Errors ```python if not item: raise HTTPException(status_code=404, detail="Item not found") ``` ### Custom Status Code ```python from fastapi import status @app.post("/", status_code=status.HTTP_201_CREATED) async def create_item(item: Item): return item ``` ## 5. Background Tasks ```python from fastapi import BackgroundTasks def write_log(message: str): with open("log.txt", "a") as log: log.write(message) @app.post("/send-notification/") async def send_notification(email: str, background_tasks: BackgroundTasks): background_tasks.add_task(write_log, f"Notification sent to {email}") return {"message": "Notification sent"} ```