Modelli di richiesta e risposta

Deployment di AI in produzione con FastAPI

Matt Eckerle

Software and Data Engineering Leader

Strutture di richiesta e risposta nelle API

Struttura della richiesta
  • Dati inviati dal client all'API
  • In genere include:
    • Metodo HTTP (GET, POST, ecc.)
    • Header
    • Parametri di query
    • Corpo della richiesta

http://localhost:8000/users/? [email protected]

  • :8000: Numero di porta. FastAPI usa di default la 8000.
  • /users/: Percorso dell'endpoint a cui accediamo.
  • ?: Indica l'inizio dei parametri di query.
  • `[email protected]`: Il parametro di query. In questo caso passiamo un'email all'endpoint.
Deployment di AI in produzione con FastAPI

Struttura della risposta

  • Dati restituiti dall'API al client
    • Payload JSON con le informazioni utente
  • In genere include:
    • Codice di stato (200 OK, 404 Not Found, ecc.)
    • Header
    • Corpo della risposta (dati richiesti o esito operazione)
HTTP/1.1 200 OK
date: Fri, 18 Oct 2024 12:34:56 GMT
server: uvicorn
content-length: 76
content-type: application/json

{
  "username": "johndoe",
  "email": "[email protected]",
  "age": 30
}
Deployment di AI in produzione con FastAPI

Modello Pydantic

  • Creazione di User
  • Uso di Pydantic
from pydantic import BaseModel
class User(BaseModel):
    username: str
    email: str
    age: int
  • Eredita da BaseModel
  • Definisce attributi con annotazioni di tipo
  • Validazione automatica in base ai tipi
Deployment di AI in produzione con FastAPI

Errore di validazione

from pydantic import ValidationError
try:
    invalid_user = User(username="john_doe", email="[email protected]", 
                        age="thirty")
    print("Invalid User:", invalid_user)
except ValidationError as e:
    print("Validation Error:", e)
Validation Error: 1 validation error for User age
Input should be a valid integer, unable to parse string as an integer 
[type=int_parsing, input_value='thirty', input_type=str]
Deployment di AI in produzione con FastAPI

Uso dei modelli Pydantic in FastAPI

from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()

class User(BaseModel): username: str email: str age: int
@app.post("/users", response_model=User)
async def create_user(user: User): return user
  • Modello usato come response_model
  • Modello usato come type hint del parametro
  • Validazione automatica della richiesta
  • De/serializzazione di richiesta/risposta
  • Generazione della documentazione API
Deployment di AI in produzione con FastAPI

Formati di richiesta e risposta

curl -X 'POST' \
  'http://localhost:8000/users/' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "username": "john_doe",
  "email": "[email protected]",
  "age": 30
  }'

 

{
  "username": "john_doe",
  "email": "[email protected]",
  "age": 30
}
Deployment di AI in produzione con FastAPI

Esercitiamoci!

Deployment di AI in produzione con FastAPI

Preparing Video For Download...