Förfrågnings- och svarsmodeller

Driftsättning av AI i produktion med FastAPI

Matt Eckerle

Software and Data Engineering Leader

Förfrågnings- och svarsstrukturer i API:er

Förfrågans struktur
  • Data som klienten skickar till API:et
  • Innehåller vanligtvis:
    • HTTP-metod (GET, POST osv.)
    • Headers
    • Frågeparametrar
    • Förfrågans body

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

  • :8000: Portnumret. FastAPI använder som standard 8000.
  • /users/: Sökvägen till den specifika endpoint vi anropar.
  • ?: Markerar starten på frågeparametrarna.
  • `[email protected]`: Frågeparametern – här skickas en e-postadress till endpointen.
Driftsättning av AI i produktion med FastAPI

Svarets struktur

  • Data som API:et skickar tillbaka till klienten
    • JSON-svarsnyttolast med användarinformation
  • Innehåller vanligtvis:
    • Statuskod (200 OK, 404 Not Found osv.)
    • Headers
    • Svarets body (begärd data eller operationsresultat)
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
}
Driftsättning av AI i produktion med FastAPI

Pydantic-modell

  • Skapande av User
  • Användning av Pydantic
from pydantic import BaseModel
class User(BaseModel):
    username: str
    email: str
    age: int
  • Ärver från BaseModel
  • Definierar attribut med typannoteringar
  • Automatisk validering baserad på typer
Driftsättning av AI i produktion med FastAPI

Valideringsfel

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]
Driftsättning av AI i produktion med FastAPI

Använda Pydantic-modeller i 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
  • Modell används som response_model
  • Modell används som typledtråd för parameter
  • Automatisk validering av förfrågningar
  • De-/serialisering av förfrågningar och svar
  • Genererar API-dokumentation
Driftsättning av AI i produktion med FastAPI

Förfrågnings- och svarsformat

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
}
Driftsättning av AI i produktion med FastAPI

Nu kör vi en övning!

Driftsättning av AI i produktion med FastAPI

Preparing Video For Download...