DÍA 03Fundamentos de API y modelos · Python Backend y APIs para Datos

Separa el modelo SQLAlchemy de los campos que una respuesta JSON puede exponer.

Día 3 18 minInicial

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: bool

from_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

  1. Marca los cuatro campos que pueden salir en el JSON.
  2. Busca email y confirma que no forma parte del contrato.
  3. Comprueba que el esquema valida customer_id como 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

1. ¿Qué describe el modelo SQLAlchemy de Customer?
2. ¿Por qué usar response_model=CustomerOut?
3. Si email no está en CustomerOut, ¿qué ocurre con esa columna?

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.

TU PROGRESO

Cargando estado…