In un'implementazione efficiente di un'API, la gestione dei dati è cruciale per garantire la corretta trasmissione delle informazioni tra il client e l'API stessa. In questo contesto, FastAPI offre un modo potente ed elegante per gestire i dati inviati dal client utilizzando Pydantic, un modulo che offre modelli di dati dichiarativi in Python.
Dichiarazione di un Modello Pydantic
Per inviare dati al nostro API, è fondamentale dichiarare un modello Pydantic. Ad esempio:
from pydantic import BaseModel
from typing import Union
from fastapi import FastAPI
class Item(BaseModel):
name: str
description: Union[str, None] = None
price: float
tax: Union[float, None] = None
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
return item
In questo esempio, definiamo un modello Item
che rappresenta i dati che ci aspettiamo di ricevere. FastAPI si occupa automaticamente della lettura del corpo della richiesta come JSON, della conversione dei tipi corrispondenti e della validazione dei dati.
Creazione del Modello e Utilizzo nei Percorsi
Una volta dichiarato il modello, possiamo utilizzarlo nei percorsi delle nostre operazioni. Ad esempio:
from pydantic import BaseModel
from typing import Union
from fastapi import FastAPI
class Item(BaseModel):
name: str
description: Union[str, None] = None
price: float
tax: Union[float, None] = None
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
return item
In questo esempio, l'API aspetta che il client invii un oggetto JSON conforme al modello Item
nel corpo della richiesta. FastAPI si occupa del resto, inclusa la generazione automatica di schemi JSON utilizzati nella documentazione automatica dell'API.
Utilizzo del Modello con Parametri di Percorso
È possibile combinare l'uso del modello con parametri di percorso. Ad esempio:
from pydantic import BaseModel
from typing import Union
from fastapi import FastAPI
class Item(BaseModel):
name: str
description: Union[str, None] = None
price: float
tax: Union[float, None] = None
app = FastAPI()
@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item):
return {"item_id": item_id, **item.dict()}
In questo caso, l'API richiede un ID come parametro di percorso e un oggetto JSON conforme al modello Item
nel corpo della richiesta. FastAPI gestisce automaticamente l'interpretazione dei dati dai diversi luoghi.
Conclusioni
FastAPI in combinazione con Pydantic offre una soluzione potente per la gestione dei dati in un'API, semplificando la lettura, la conversione e la validazione dei dati inviati dai client. Utilizzando modelli dichiarativi, è possibile migliorare la chiarezza del codice e garantire una maggiore robustezza nell'elaborazione dei dati.
Concludendo, l'utilizzo di Pydantic in FastAPI si rivela un'ottima scelta per chiunque desideri implementare API efficienti e affidabili con una gestione avanzata dei dati.