Validación de datos con Pydantic en FastAPI: Creación de endpoints
Clase 5 de 23 • Curso de FastAPI
Resumen
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
BaseModel
de Pydantic. - Crear una clase llamada
Customer
que herede deBaseModel
. - Definir campos dentro de la clase con sus tipos, por ejemplo,
name: str
para el nombre yage: int
para la edad. - Utilizar
typing
para permitir múltiples tipos de datos, como en el campodescription
, que podría ser de tipostr
oNone
(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
name
debe 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.