Definir los campos de una respuesta pública
Objetivos
Vas a definir una salida JSON explícita y comprobar por qué una API no debe devolver automáticamente cada columna de una tabla.
Concepto
El contrato de respuesta es la forma estable que una API promete devolver. Pydantic valida los datos y FastAPI puede convertir objetos SQLAlchemy a ese formato. El modelo SQLAlchemy describe columnas para leer MySQL; el modelo Pydantic describe campos públicos. Son dos responsabilidades distintas.
Esta separación evita exponer una dirección de correo, una marca interna u otra columna que no sea necesaria. Si cambia la tabla, puedes conservar la respuesta pública mientras sigan disponibles los campos que usa.
Ejemplo
Guarda el esquema de salida en app/schemas.py:
from pydantic import BaseModel, ConfigDict
class CustomerOut(BaseModel):
model_config = ConfigDict(from_attributes=True)
customer_id: int
first_name: str
last_name: str
active: boolfrom_attributes=True permite leer atributos de una instancia ORM. El ejemplo deja fuera email: aunque el modelo de tabla pueda incluirlo, FastAPI solo serializará los campos declarados en CustomerOut. Consulta la guía oficial de modelos de respuesta para ver el comportamiento del framework.
Práctica guiada
- Marca los cuatro campos que pueden salir en el JSON.
- Busca
emaily confirma que no forma parte del contrato. - Comprueba que el esquema valida
customer_idcomo entero.
Reto
Agrega store_id como entero al contrato y deja email fuera. No cambies el modelo SQLAlchemy.
Intenta el reto antes de consultar las pistas.
Quiz
Comprobación
La tabla y la respuesta pública ya tienen límites distintos. A continuación prepararás la configuración local sin guardar secretos en el código.