Fundamentos de FastAPI
10 ejemplos para empezar con FastAPI: 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos para empezar con FastAPI: 7 básicos y 3 intermedios.
uv venv && source .venv/bin/activate
uv pip install "fastapi[standard]>=0.115" uvicorn httpxfastapi dev main.py.Aplicación mínima con documentación OpenAPI automática.
from fastapi import FastAPI
app = FastAPI(title="API de Demostración")
@app.get("/")
def read_root() -> dict[str, str]:
return {"message": "Hola, FastAPI"}FastAPI() crea el objeto de aplicación ASGI./docs.uvicorn main:app --reload o fastapi dev main.py.Relacionado: Modelos de Solicitud y Respuesta - cuerpos de solicitud tipados
Captura valores tipados de la ruta de la URL.
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/users/{user_id}")
def get_user(user_id: int) -> dict[str, int]:
if user_id < 1:
raise HTTPException(status_code=404, detail="Usuario no encontrado")
return {"user_id": user_id}HTTPException para respuestas 4xx explícitas.Relacionado: Middleware y Manejo de Errores - cuerpos de error consistentes
Filtros opcionales y paginación de la cadena de consulta.
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items")
def list_items(
skip: int = Query(0, ge=0),
limit: int = Query(20, ge=1, le=100),
q: str | None = None,
) -> dict[str, object]:
return {"skip": skip, "limit": limit, "q": q}Query() agrega metadatos de validación más allá de un valor predeterminado simple.str | None = None.ge y le aparecen en OpenAPI.POST JSON validado por modelos Pydantic 2.
from fastapi import FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
class ItemCreate(BaseModel):
name: str = Field(min_length=1, max_length=100)
price: float = Field(gt=0)
@app.post("/items", status_code=201)
def create_item(item: ItemCreate) -> ItemCreate:
return itemdetail a nivel de campo.Relacionado: Modelos de Solicitud y Respuesta - filtrado de
response_model
Oculta campos internos de las respuestas serializadas.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class UserIn(BaseModel):
username: str
password: str
class UserOut(BaseModel):
username: str
@app.post("/users", response_model=UserOut)
def create_user(user: UserIn) -> UserIn:
return userresponse_model controla tanto OpenAPI como la carga útil JSON.Swagger UI interactivo incluido con cada aplicación.
from fastapi import FastAPI
app = FastAPI(
title="API de Inventario",
version="1.0.0",
docs_url="/docs",
redoc_url="/redoc",
)
@app.get("/health")
def health() -> dict[str, str]:
return {"status": "ok"}/docs para Swagger UI y /redoc para ReDoc.docs_url=None si la política lo requiere.Establece semántica HTTP en respuestas exitosas.
from fastapi import FastAPI, Response
app = FastAPI()
@app.post("/notify", status_code=202)
def enqueue(response: Response) -> dict[str, str]:
response.headers["X-Job-Id"] = "job-42"
return {"status": "aceptado"}Response para establecer encabezados sin cambiar el tipo del cuerpo.responses={}.Comparte sesiones y configuraciones entre rutas.
from collections.abc import Generator
from fastapi import Depends, FastAPI
app = FastAPI()
def get_db() -> Generator[dict[str, str], None, None]:
db = {"connected": "true"}
yield db
@app.get("/items")
def list_items(db: dict[str, str] = Depends(get_db)) -> dict[str, str]:
return dbDepends resuelve proveedores una vez por solicitud.yield para la configuración y limpieza de conexiones.app.dependency_overrides.Relacionado: Inyección de Dependencias - subdependencias y ámbitos
Divide APIs grandes en routers de características.
from fastapi import APIRouter, FastAPI
users_router = APIRouter(prefix="/users", tags=["users"])
@users_router.get("/")
def list_users() -> list[str]:
return ["ada", "grace"]
app = FastAPI()
app.include_router(users_router)APIRouter agrupa endpoints con prefijo y etiquetas compartidos.Relacionado: Despliegue de FastAPI - diseño de proyectos de producción
E/S no bloqueante con endpoints async def.
import httpx
from fastapi import FastAPI
app = FastAPI()
@app.get("/external")
async def proxy() -> dict[str, str]:
async with httpx.AsyncClient() as client:
resp = await client.get("https://httpbin.org/get", timeout=5.0)
return {"status": str(resp.status_code)}async def al esperar E/S HTTP, de base de datos o de caché.run_in_threadpool.Relacionado: Rutas Asíncronas y Bases de Datos - sesiones asíncronas de SQLAlchemy
Versiones de la pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026