Tag: python, fastapi, pydantic, starlette, async, rest-api, uvicorn
Livello: intermedio
TL;DR: Web framework Python asincrono ad alte prestazioni basato su Starlette e Pydantic per costruire API REST con validazione automatica e documentazione OpenAPI.
Basato su standard aperti: OpenAPI, JSON Schema e Starlette per il routing ASGI.
Validazione dati, parsing e serializzazione basati sui modelli Pydantic.
Supporto nativo per concorrenza asincrona con async def ed esecuzione threadpool per def sincroni.
Sistema di Dependency Injection potente tramite Depends per auth, database session e logica riutilizzabile.
Generazione automatica della documentazione interattiva su percorsi /docs (Swagger UI) e /redoc (ReDoc).
Type hints standard di Python usati per validazione parametri, query, headers e body.
Gestione integrata del ciclo di vita applicativo tramite il context manager lifespan.
Q: Qual e' la differenza tra dichiarare un endpoint con async def rispetto a def?R: Uso async def per operazioni non bloccanti basate su coroutine e librerie asincrone; uso def classico quando invoco librerie sincrone o bloccanti, poiche' FastAPI le esegue automaticamente in un threadpool separato evitando di bloccare l'event loop.
Q: Come gestisci l'autenticazione e la sessione DB in modo modulare?R: Sfrutto la Dependency Injection con Depends: definisco generatori per il ciclo di vita delle sessioni DB e dipendenze per estrarre e validare JWT o bearer token dall'header HTTP prima di inoltrare la richiesta ai controller.
Invocare funzioni bloccanti o sync I/O dentro endpoint definiti con async def, saturando l'event loop principale.
Confondere le classi BaseModel di Pydantic v1 con la sintassi e i metodi modificati in Pydantic v2.
Omettere l'uso di yield nei generatori passati a Depends, causando mancate chiusure di connessioni o sessioni aperte.
Usare argomenti di default mutabili dentro i modelli o nei parametri di route.
```pip install "fastapi[standard]" uvicorn
uvicorn main:app --reload --host 0.0.0.0 --port 8000
from fastapi import FastAPI, Depends, HTTPException, status
from pydantic import BaseModel, Field
app = FastAPI(title="Core API")
class ItemSchema(BaseModel):
name: str = Field(..., min_length=1)
price: float = Field(..., gt=0.0)
async def verify_token(token: str = "secret-token"):
if token != "secret-token":
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid credentials"
)
return token
@app.post("/items/", status_code=status.HTTP_201_CREATED)
async def create_item(item: ItemSchema, auth: str = Depends(verify_token)):
return {"status": "ok", "data": item.model_dump()}
```
[ ] Gestione eventi di avvio e chiusura con lifespan anziche' i deprecati @app.on_event.
[ ] Pattern di dependency injection con sub-dependencies annidate.
[ ] BackgroundTasks nativi rispetto a code distribuite come Celery o Redis Queue.
[x] Tipizzazione Pydantic v2 e validatori con @field_validator.
Documentazione ufficiale FastAPI (fastapi.tiangolo.com)
Pydantic Documentation (docs.pydantic.dev)
Starlette Toolkit (starlette.io)