📘 Fundamentos de FastAPI
1. Introducción
FastAPI es un framework moderno, rápido y eficiente para
construir APIs web con Python 3.7+, basado en los estándares
OpenAPI (anteriormente conocido como Swagger) y JSON Schema.
Fue creado por Sebastián Ramírez en 2018, con el objetivo de
combinar rendimiento, tipado, simplicidad y documentación
automática.
FastAPI está diseñado para ofrecer un desarrollo ágil, seguro y de alto
rendimiento, con una sintaxis limpia y moderna. Es ampliamente usado
en backend web, microservicios, inteligencia artificial, data
science y sistemas distribuidos.
2. Principales características
FastAPI destaca por varias razones que lo han convertido en uno de los
frameworks más amados en el ecosistema Python:
1. ⚡ Velocidad: Su rendimiento es comparable al de frameworks
asíncronos como [Link] o Go, gracias a Starlette (para la parte
web) y Pydantic (para validación de datos).
2. 🧠 Validación automática: Usa tipos de Python (type hints)
para validar automáticamente las entradas (request body,
parámetros, etc.).
3. 🧾 Documentación automática: Genera interfaces interactivas de
documentación con Swagger UI y ReDoc, sin necesidad de
código adicional.
4. 🧩 Tipado moderno: Integra el tipado estático de Python para
mejorar la calidad y robustez del código.
5. 🔄 Asincronía nativa: Compatible con async y await para construir
APIs no bloqueantes.
6. 🧰 Interoperabilidad: Compatible con cualquier ORM
(SQLAlchemy, Tortoise ORM, etc.), y con librerías como TensorFlow,
Scikit-learn o Celery.
7. 💡 Fácil aprendizaje: Su curva de aprendizaje es corta si ya se
conoce Python.
3. Instalación y configuración inicial
Para comenzar con FastAPI, primero se instala el framework y un
servidor ASGI (como Uvicorn) para ejecutarlo.
pip install fastapi
pip install "uvicorn[standard]"
Luego, se crea un archivo llamado [Link]:
from fastapi import FastAPI
app = FastAPI()
@[Link]("/")
def read_root():
return {"mensaje": "¡Hola, FastAPI!"}
Y se ejecuta el servidor con:
uvicorn main:app --reload
El argumento --reload recarga automáticamente el servidor al detectar
cambios en el código.
4. Conceptos fundamentales
FastAPI organiza la creación de una API en rutas, métodos HTTP, y
modelos de datos.
4.1 Rutas y métodos HTTP
Las rutas son funciones decoradas con @[Link](), @[Link](),
@[Link](), @[Link](), etc., que indican el tipo de petición HTTP.
@[Link]("/usuarios")
def listar_usuarios():
return [{"nombre": "Ana"}, {"nombre": "Carlos"}]
@[Link]("/usuarios")
def crear_usuario(nombre: str):
return {"mensaje": f"Usuario {nombre} creado"}
4.2 Parámetros de ruta
FastAPI permite definir parámetros dinámicos en las URLs:
@[Link]("/usuarios/{id}")
def obtener_usuario(id: int):
return {"usuario_id": id}
FastAPI automáticamente convierte id en int y genera errores 422 si el
tipo no coincide.
4.3 Parámetros de consulta (query parameters)
Se envían después del signo ? en la URL:
@[Link]("/buscar")
def buscar_usuario(nombre: str = None, edad: int = None):
return {"nombre": nombre, "edad": edad}
Ejemplo:
/buscar?nombre=Ana&edad=25
4.4 Cuerpo de las peticiones (Request Body)
Para recibir datos complejos, FastAPI usa Pydantic models, que validan
automáticamente el tipo de dato.
from pydantic import BaseModel
class Usuario(BaseModel):
nombre: str
edad: int
email: str
@[Link]("/usuarios/")
def crear_usuario(usuario: Usuario):
return {"mensaje": f"Usuario {[Link]} creado"}
Si el JSON enviado no cumple con la estructura, FastAPI responde con un
error detallado 422 indicando el campo incorrecto.
5. Tipos de datos y validación automática
FastAPI aprovecha los type hints de Python para validar, documentar
y autocompletar.
from typing import Optional
@[Link]("/producto/")
def obtener_producto(nombre: str, disponible: Optional[bool] = None):
return {"nombre": nombre, "disponible": disponible}
La validación ocurre de manera automática sin necesidad de escribir
lógica adicional.
6. Respuestas y códigos HTTP
FastAPI permite devolver respuestas personalizadas con status codes y
tipos de respuesta:
from fastapi import status
@[Link]("/login", status_code=status.HTTP_201_CREATED)
def login(usuario: Usuario):
return {"mensaje": "Inicio de sesión exitoso"}
También se puede usar Response o JSONResponse para un control más
fino.
7. Documentación automática
FastAPI genera automáticamente una documentación interactiva en dos
formatos:
Swagger UI: [Link]
ReDoc: [Link]
Esto ocurre gracias a los estándares OpenAPI y JSON Schema, lo que
facilita el trabajo colaborativo entre desarrolladores y equipos.
8. Asincronía con async / await
FastAPI permite definir rutas asíncronas para mejorar el rendimiento en
operaciones que dependen de I/O (como consultas a bases de datos o
llamadas a APIs externas):
import asyncio
@[Link]("/esperar")
async def esperar():
await [Link](2)
return {"mensaje": "Listo después de 2 segundos"}
Gracias al uso de Uvicorn (basado en ASGI), FastAPI puede manejar
miles de conexiones concurrentes sin bloquear el servidor.
9. Dependencias (Dependency Injection)
FastAPI tiene un potente sistema de inyección de dependencias que
permite reutilizar lógica común (como autenticación, configuración, o
conexiones a BD):
from fastapi import Depends
def obtener_token(token: str):
if token != "secreto123":
raise Exception("Token inválido")
return token
@[Link]("/protegido")
def protegido(token: str = Depends(obtener_token)):
return {"mensaje": "Acceso permitido"}
10. Manejo de errores
FastAPI permite definir excepciones personalizadas con respuestas
detalladas:
from fastapi import HTTPException
@[Link]("/item/{id}")
def obtener_item(id: int):
if id > 10:
raise HTTPException(status_code=404, detail="Item no
encontrado")
return {"item_id": id}
11. Middlewares
Los middlewares son funciones que se ejecutan antes y después de
cada solicitud. Sirven para agregar lógica común como logs,
autenticación o CORS.
from [Link] import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
12. Integración con bases de datos
FastAPI no incluye ORM propio, pero se integra fácilmente con
SQLAlchemy, Tortoise ORM o Prisma.
Ejemplo básico con SQLAlchemy:
from sqlalchemy import create_engine, Column, Integer, String
from [Link] import declarative_base
from [Link] import sessionmaker
SQLALCHEMY_DATABASE_URL = "sqlite:///./[Link]"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(bind=engine)
Base = declarative_base()
class UsuarioDB(Base):
__tablename__ = "usuarios"
id = Column(Integer, primary_key=True, index=True)
nombre = Column(String)
13. Autenticación y seguridad
FastAPI proporciona módulos listos para autenticación con OAuth2, JWT,
y Bearer Tokens.
Ejemplo simplificado con OAuth2PasswordBearer:
from [Link] import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@[Link]("/perfil")
def perfil(token: str = Depends(oauth2_scheme)):
return {"token": token}
14. Pruebas automáticas
FastAPI integra fácilmente pruebas con pytest y su cliente de prueba:
from [Link] import TestClient
client = TestClient(app)
def test_read_main():
response = [Link]("/")
assert response.status_code == 200
assert [Link]() == {"mensaje": "¡Hola, FastAPI!"}
15. Despliegue y rendimiento
FastAPI puede desplegarse en servidores como:
Uvicorn (ASGI)
Hypercorn
Gunicorn + Uvicorn workers
Y servicios en la nube:
AWS Lambda
Google Cloud Run
Docker / Kubernetes
Ejemplo de despliegue local:
uvicorn main:app --host [Link] --port 8000
16. Buenas prácticas
✅ Usar modelos Pydantic para validar datos.
✅ Separar rutas por módulos (routers).
✅ Usar Depends() para lógica compartida.
✅ Activar CORS solo para orígenes permitidos.
✅ Evitar operaciones bloqueantes sin async.
✅ Usar variables de entorno para configuraciones sensibles.
17. Conclusión
FastAPI representa una nueva generación de frameworks web en
Python: rápido, elegante, seguro y diseñado para desarrolladores
modernos.
Su enfoque basado en tipos, asincronía y documentación
automática lo hace ideal para crear APIs REST, microservicios, y
backends complejos con mínima fricción.
Gracias a su arquitectura moderna, es capaz de manejar miles de
peticiones concurrentes con un código limpio y legible, lo que lo
convierte en una elección destacada tanto para startups como para
grandes empresas tecnológicas.
En pocas palabras:
FastAPI es el futuro del desarrollo backend en Python.