Python tiene soporte para "type hints" opcionales (también llamados "anotaciones de tipo").
Estos "type hints" o anotaciones son una sintaxis especial que permite declarar el tipo de una variable.
Al declarar tipos para tus variables, los editores y las herramientas pueden darte mejor soporte.
Esto es solo un tutorial rápido / repaso sobre los type hints de Python. Cubre solo lo mínimo necesario para usarlos con FastAPI... que en realidad es muy poco.
FastAPI está basado por completo en estos type hints, le dan muchas ventajas y beneficios.
Pero incluso si nunca usas FastAPI, te beneficiarías de aprender un poco sobre ellos.
Nota
Si eres un experto en Python, y ya sabes todo sobre los type hints, salta al siguiente capítulo.
Para algunos casos de uso adicionales, podrías necesitar importar algunas cosas del módulo typing de la biblioteca estándar, por ejemplo cuando quieres declarar que algo tiene "cualquier tipo", puedes usar Any de typing:
Algunos tipos pueden tomar "parámetros de tipo" entre corchetes, para definir sus tipos internos, por ejemplo una "lista de strings" se declararía list[str].
Estos tipos que pueden tomar parámetros de tipo se llaman Tipos genéricos o Genéricos.
Puedes usar los mismos tipos integrados como genéricos (con corchetes y tipos dentro):
Usar str | None en lugar de solo str le permitirá al editor ayudarte a detectar errores donde podrías estar asumiendo que un valor siempre es un str, cuando en realidad también podría ser None.
Pydantic es una biblioteca de Python para realizar validación de datos.
Declaras la "forma" de los datos como clases con atributos.
Y cada atributo tiene un tipo.
Luego creas una instancia de esa clase con algunos valores y validará los valores, los convertirá al tipo apropiado (si es el caso) y te dará un objeto con todos los datos.
Y obtienes todo el soporte del editor con ese objeto resultante.
Un ejemplo de la documentación oficial de Pydantic:
Python también tiene una característica que permite poner metadatos adicionales en estos type hints usando Annotated.
Puedes importar Annotated desde typing.
fromtypingimportAnnotateddefsay_hello(name:Annotated[str,"this is just metadata"])->str:returnf"Hello {name}"
Python por sí mismo no hace nada con este Annotated. Y para los editores y otras herramientas, el tipo sigue siendo str.
Pero puedes usar este espacio en Annotated para proporcionar a FastAPI metadatos adicionales sobre cómo quieres que se comporte tu aplicación.
Lo importante a recordar es que el primer parámetro de tipo que pasas a Annotated es el tipo real. El resto, es solo metadatos para otras herramientas.
Por ahora, solo necesitas saber que Annotated existe, y que es Python estándar. 😎
Más adelante verás lo poderoso que puede ser.
Consejo
El hecho de que esto sea Python estándar significa que seguirás obteniendo la mejor experiencia de desarrollo posible en tu editor, con las herramientas que usas para analizar y refactorizar tu código, etc. ✨
Y también que tu código será muy compatible con muchas otras herramientas y bibliotecas de Python. 🚀
FastAPI aprovecha estos type hints para hacer varias cosas.
Con FastAPI declaras parámetros con type hints y obtienes:
Editor support.
Type checks.
...y FastAPI usa las mismas declaraciones para:
Definir requisitos: a partir de parámetros de ruta de la petición, parámetros de consulta, headers, bodies, dependencias, etc.
Convertir datos: de la petición al tipo requerido.
Validate data: coming from each request:
Generar errores automáticos devueltos al cliente cuando los datos son inválidos.
Document the API using OpenAPI:
el cual es luego usado por las interfaces de usuario de documentación interactiva automática.
Esto puede sonar abstracto. No te preocupes. Verás todo esto en acción en el Tutorial - Guía de Usuario.
Lo importante es que al usar tipos estándar de Python, en un solo lugar (en lugar de añadir más clases, decoradores, etc), FastAPI hará gran parte del trabajo por ti.
Nota
Si ya pasaste por todo el tutorial y volviste para ver más sobre tipos, un buen recurso es la "cheat sheet" de mypy.