Servicios web y acceso a datos
19 pasos en 5 series de Python.
Cómo se ve hoy un servicio web en Python en la práctica. Primero los modelos de Pydantic, porque todo el truco de FastAPI es que la anotación de tipo es la validación, la documentación y la serialización al mismo tiempo.
Luego rutas, inyección de dependencias y handlers async, seguidos de SQLAlchemy para la parte donde los datos tienen que persistir. Diecinueve pasos, y el Bis los conecta en un servicio en vez de dejarte con cuatro bibliotecas y ninguna idea de cómo se encuentran.
Modelos de Pydantic
- Modelos de PydanticUn modelo valida y convierte al construirse, desde una clase de anotaciones.
- Restricciones con FieldField lleva los límites, así la validación vive junto a la declaración.
- Validadoresfield_validator para un campo, model_validator para el objeto entero.
- Modelos anidadosModelos dentro de modelos, y listas de ellos, validados hasta el fondo.
- Configuración desde el entornoUn modelo para la configuración, leído del entorno y con valores por defecto.
Rutas de FastAPI
- Una app de FastAPIUna función decorada es un endpoint; el valor de retorno se vuelve JSON.
- Parámetros de ruta y de consultaLas anotaciones declaran de dónde viene un valor y qué tipo debe tener.
- Cuerpos de peticiónUn modelo de pydantic como parámetro significa que el cuerpo se valida por ti.
- Errores y códigos de estadoHTTPException es cómo un handler se niega, con el código de estado que tú eliges.
Dependencias y async
- DependenciasDepends inyecta la preparación compartida, y el framework la cachea por petición.
- Endpoints asyncUn handler async def corre en el event loop, así que los await no lo bloquean.
- MiddlewareUn middleware envuelve cada petición: tiempos, encabezados, logging.
SQLAlchemy
- Engine y text de SQLAlchemyEl engine es dueño del pool de conexiones; text() corre SQL plano a través de él.
- Modelos declarativosUna clase mapeada por tabla, con columnas tipadas.
- SesionesUna Session es una unidad de trabajo: agregar, hacer flush, confirmar o revertir.
- selectLa API de consultas 2.0: arma un select, ejecútalo, lee escalares o filas.
- RelacionesUna clave foránea más relationship te da objetos en ambos lados.
Bis
- api_service.pyUn servicio FastAPI pequeño: modelos, store inyectado como dependencia, rutas y pruebas.
- sa_store.pyUna capa de datos con SQLAlchemy: modelos, relaciones, consultas, agregados.