Modelos de requisição e resposta

Colocando IA em Produção com FastAPI

Matt Eckerle

Software and Data Engineering Leader

Estruturas de requisição e resposta em APIs

Estrutura da requisição
  • Dados enviados pelo cliente para a API
  • Normalmente inclui:
    • Método HTTP (GET, POST, etc.)
    • Headers
    • Parâmetros de query
    • Corpo da requisição

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

  • :8000: O número da porta. O FastAPI usa 8000 por padrão.
  • /users/: O caminho do endpoint acessado.
  • ?: Indica o início dos parâmetros de query.
  • `[email protected]`: O parâmetro de query. Aqui, passamos um e-mail para o endpoint.
Colocando IA em Produção com FastAPI

Estrutura da resposta

  • Dados devolvidos pela API ao cliente
    • Payload JSON com informações do usuário
  • Normalmente inclui:
    • Status code (200 OK, 404 Not Found, etc.)
    • Headers
    • Corpo da resposta (dados solicitados ou resultado da operação)
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
}
Colocando IA em Produção com FastAPI

Modelo Pydantic

  • Criação de User
  • Uso do Pydantic
from pydantic import BaseModel
class User(BaseModel):
    username: str
    email: str
    age: int
  • Herda de BaseModel
  • Define atributos com anotações de tipo
  • Validação automática baseada nos tipos
Colocando IA em Produção com FastAPI

Erro de validação

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]
Colocando IA em Produção com FastAPI

Usando modelos Pydantic no 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
  • Modelo usado como response_model
  • Modelo usado como dica de tipo de parâmetro
  • Validação automática da requisição
  • De/serialização da requisição/resposta
  • Gera docs da API
Colocando IA em Produção com FastAPI

Formatos de requisição e resposta

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
}
Colocando IA em Produção com FastAPI

Vamos praticar!

Colocando IA em Produção com FastAPI

Preparing Video For Download...