~/saidqb cat ecosystem/framework/fastapi.md
Fa
FastAPI
High-performance Python web framework
commit by saidqb
Requirements
- Python
3.11+(rekomendasi3.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)