Modelado de Datos y Conexión de Modelos en FastAPI

Clase 6 de 23Curso de FastAPI

Resumen

Para diseñar una API robusta, es esencial modelar correctamente los datos, especialmente al crear nuevos modelos que organicen y relacionen la información eficientemente. En esta guía, exploraremos cómo crear modelos en FastAPI para estructurar datos, conectar modelos y optimizar la funcionalidad de nuestra API.

¿Cómo crear y organizar modelos en FastAPI?

Al crear una API, tener todos los modelos en un archivo separado, como models.py, ayuda a evitar el “código espagueti” y mantiene el código modular y ordenado. FastAPI no exige esta organización, pero es una buena práctica. Primero, copiamos el modelo de customer y el BaseModel de FastAPI desde el archivo principal (main.py) y los pegamos en models.py.

¿Cómo construir un modelo de transacción?

Para estructurar las transacciones en nuestra API, creamos el modelo Transaction en models.py, derivado de BaseModel. Incluimos los siguientes campos:

  • id: un identificador único, de tipo entero.
  • amount: un entero en vez de float para representar valores financieros, evitando problemas de precisión.
  • description: un campo de tipo str, obligatorio para describir la transacción.

Esta estructura permite gestionar las transacciones de manera segura y clara.

¿Cómo construir un modelo de factura y conectar los modelos?

El modelo Invoice representa una factura y también hereda de BaseModel. Además de un id, el modelo Invoice conecta los datos al incluir:

  • customer: un campo de tipo Customer, que enlaza la factura con el cliente correspondiente.
  • transactions: una lista de Transaction que contiene todas las transacciones asociadas a la factura.

Para indicar que transactions es una lista, usamos el tipo List con Transaction, lo que permite que FastAPI gestione adecuadamente este arreglo de datos.

¿Cómo calcular el total de una factura?

Para calcular el total de las transacciones en una factura, se agrega un método total en el modelo Invoice. Este método:

  • Utiliza un decorador @property, haciendo que se acceda como un atributo.
  • Suma el campo amount de cada Transaction en la lista transactions mediante una comprensión de listas, retornando el total.

De esta forma, el total se calcula automáticamente, y se puede utilizar para generar el subtotal al momento de consultar el endpoint de facturación.

¿Cómo usar los modelos en los endpoints de la API?

Los modelos se importan al archivo principal (main.py), y se crean nuevos endpoints para gestionar transactions e invoices. FastAPI genera automáticamente la documentación de estos endpoints, mostrando los datos necesarios para crear facturas con un cliente y una lista de transacciones, simplificando el uso de la API para el usuario final.

¿Cómo validar tipos de datos con Pydantic?

Utilizar Pydantic para definir los tipos de datos en nuestros modelos permite validaciones automáticas y mensajes de error claros en caso de datos incorrectos. Por ejemplo, el campo email en el modelo customer se puede validar agregando el tipo EmailStr, lo que permite a la API detectar y rechazar correos no válidos.