Logo

~/saidqb cat ecosystem/framework/fastapi.md

Fa

FastAPI

High-performance Python web framework

commit by saidqb

Requirements

  • Python 3.11+ (rekomendasi 3.12/3.13)
  • FastAPI versi terbaru — cek pypi.org/project/fastapi
  • Uvicorn (atau Hypercorn) sebagai ASGI server
python --version && pip show fastapi

Instalasi & jalankan

pip install fastapi uvicorn[standard]
uvicorn main:app --reload
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4

Path operation

app = FastAPI()

@app.get("/")                                    # GET
@app.post("/items")                               # POST
@app.put("/items/{id}")                           # PUT
@app.patch("/items/{id}")                         # PATCH
@app.delete("/items/{id}")                        # DELETE
def handler(): ...

Parameter

@app.get("/items/{item_id}")
def get_item(item_id: int, q: str | None = None, limit: int = 10):
    return {"item_id": item_id, "q": q, "limit": limit}

Request body & response model (Pydantic)

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_active: bool = True

@app.post("/items", response_model=Item, status_code=201)
def create_item(item: Item):
    return item

Dependency injection

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

@app.get("/users")
def list_users(db=Depends(get_db), user=Depends(get_current_user)):
    return db.query(User).all()

Router modular

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

@router.get("/")
def list_users(): ...

app.include_router(router)

Exception & middleware

raise HTTPException(status_code=404, detail="Not found")

@app.exception_handler(ValueError)
def handle_value_error(request, exc):
    return JSONResponse(status_code=400, content={"error": str(exc)})

app.add_middleware(CORSMiddleware, allow_origins=["*"])

Dokumentasi otomatis

/docs (Swagger UI) · /redoc (ReDoc) · /openapi.json (schema)