Validación de datos con Pydantic en FastAPI: Creación de endpoints
Clase 5 de 23 • Curso de FastAPI
Contenido del curso
Parámetros y Validación
CRUD en FastAPI
Arquitectura en FastAPI
Bases de Datos y Consultas
- 13

Relaciones en FastAPI y SQL Model: Creación y Uso Práctico
18:09 min - 14

Relaciones Muchos a Muchos en Bases de Datos con SQLModel
06:39 min - 15

Creación y Suscripción de Planes y Clientes en FastAPI
11:58 min - 16

Consultas Avanzadas con SQL Model y Filtrado de Estados en FastAPI
07:20 min - 17

Validación de Emails Únicos en Bases de Datos con Pydantic y FastAPI
07:28 min
Middlewares
Unit Testing
Seguridad y Autenticación
Para crear un endpoint dinámico y seguro en FastAPI, es fundamental validar la información recibida, especialmente si el contenido se envía en el cuerpo de la solicitud. Los usuarios pueden ingresar datos incorrectos o no válidos, como un correo electrónico mal formateado, por lo que validar estos datos es crucial para el correcto funcionamiento de la API. FastAPI facilita esta validación a través de Pydantic, una biblioteca de Python que permite construir modelos de datos robustos. A continuación, exploraremos cómo crear un modelo básico de cliente para validar datos en un endpoint.
¿Cómo estructurar un modelo de datos en FastAPI?
Para definir un modelo de datos, FastAPI emplea Pydantic, que permite usar clases para representar un esquema y validar la información que ingresa. Los pasos iniciales incluyen:
- Importar
BaseModelde Pydantic. - Crear una clase llamada
Customerque herede deBaseModel. - Definir campos dentro de la clase con sus tipos, por ejemplo,
name: strpara el nombre yage: intpara la edad. - Utilizar
typingpara permitir múltiples tipos de datos, como en el campodescription, que podría ser de tipostroNone(opcional).
FastAPI valida automáticamente los datos ingresados en cada campo según el tipo especificado. Por ejemplo, si se establece que el campo name debe ser un string, cualquier otro tipo de entrada generará un error de validación.
¿Cómo integrar el modelo en un endpoint?
Una vez definido el modelo, el siguiente paso es integrarlo en un endpoint. Esto se realiza mediante una función asincrónica, por ejemplo, async def create_customer, que acepta datos de tipo Customer en el cuerpo de la solicitud.
- Se define el endpoint con el método
POST, para cumplir con las recomendaciones REST al crear recursos. - Se registran los datos del cliente con el decorador
@app.post("/customers"). - En el cuerpo de la solicitud, los datos enviados serán automáticamente validados según el esquema de
Customer. - Finalmente, la función puede retornar los mismos datos recibidos para verificar su recepción o realizar acciones adicionales como guardar en una base de datos o enviar una notificación.
¿Qué sucede al probar el endpoint?
Para probar el endpoint, FastAPI proporciona una documentación interactiva en /docs. Allí, es posible ver los campos requeridos y probar el endpoint directamente:
- Al hacer clic en “Try it out”, se pueden llenar los campos y enviar la solicitud.
- La respuesta muestra el JSON recibido o los errores de validación. Por ejemplo, si
namedebe ser un string pero se envía un número, se mostrará un mensaje de error detallado indicando el problema y el campo afectado.
Si el servidor responde con un 200 OK, es posible que se esté usando el código HTTP incorrecto para una creación de recurso. En estos casos, lo recomendable es devolver un 201 Created cuando el recurso se haya almacenado correctamente.
¿Cómo manejar errores y otros códigos de respuesta?
FastAPI permite definir diferentes códigos de respuesta, esenciales para indicar el estado de las solicitudes:
- 200: Solicitud exitosa.
- 201: Recurso creado.
- 422: Error de validación, útil cuando los datos ingresados no cumplen con el modelo definido.
Al enviar datos no válidos, como un número en el campo name, FastAPI devuelve automáticamente un 422, especificando el error en el JSON de la respuesta. Este sistema facilita identificar problemas y proporciona mensajes claros para corregir errores en el frontend.