Modele de cerere și răspuns

Deployment AI în producție cu FastAPI

Matt Eckerle

Software and Data Engineering Leader

Structuri de cerere și răspuns în API-uri

Structura cererii
  • Date trimise de client către API
  • Include de obicei:
    • Metoda HTTP (GET, POST etc.)
    • Anteturi
    • Parametri de interogare
    • Corpul cererii

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

  • :8000: Numărul portului. FastAPI utilizează implicit portul 8000.
  • /users/: Calea către endpoint-ul accesat.
  • ?: Marchează începutul parametrilor de interogare.
  • `[email protected]`: Parametrul de interogare — în acest caz, o adresă de e-mail.
Deployment AI în producție cu FastAPI

Structura răspunsului

  • Date trimise înapoi de API către client
    • Răspuns JSON cu informații despre utilizator
  • Include de obicei:
    • Cod de stare (200 OK, 404 Not Found etc.)
    • Anteturi
    • Corpul răspunsului (datele solicitate sau rezultatul operațiunii)
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 AI în producție cu FastAPI

Model Pydantic

  • Crearea modelului User
  • Utilizarea Pydantic
from pydantic import BaseModel
class User(BaseModel):
    username: str
    email: str
    age: int
  • Moștenește din BaseModel
  • Definește atribute cu adnotări de tip
  • Validare automată bazată pe tipuri
Deployment AI în producție cu FastAPI

Eroare de validare

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 AI în producție cu FastAPI

Utilizarea modelelor Pydantic în 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
  • Model utilizat ca response_model
  • Model utilizat ca indiciu de tip pentru parametru
  • Validare automată a cererii
  • De/serializare cerere/răspuns
  • Generare documentație API
Deployment AI în producție cu FastAPI

Formate de cerere și răspuns

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 AI în producție cu FastAPI

Să exersăm!

Deployment AI în producție cu FastAPI

Preparing Video For Download...