Python de Cero a Experto / Ruta backend
Rutas, parámetros y cuerpo
Una API útil responde según lo que le piden: el gasto número 5, los de categoría "comida", o crea uno con los datos que envías. FastAPI lee la parte variable de la URL (PARÁMETROS DE RUTA), los filtros (PARÁMETROS DE CONSULTA) y los datos enviados (el CUERPO) —y los valida por ti usando type hints—. Hoy haces tu API dinámica: que responda a peticiones concretas.
Las partes de un pedido
Parámetros de ruta y de consulta
from fastapi import FastAPI
app = FastAPI()
GASTOS = [
{"id": 1, "nombre": "Café", "valor": 4000, "categoria": "comida"},
{"id": 2, "nombre": "Bus", "valor": 2800, "categoria": "transporte"},
{"id": 3, "nombre": "Cine", "valor": 18000, "categoria": "ocio"},
]
# PARÁMETRO DE RUTA: la parte variable de la URL, tipada.
# GET /gastos/2 -> gasto_id = 2 (FastAPI valida que sea int)
@app.get("/gastos/{gasto_id}")
def obtener_gasto(gasto_id: int):
for g in GASTOS:
if g["id"] == gasto_id:
return g
return {"error": "no encontrado"}
# PARÁMETRO DE CONSULTA: filtros opcionales tras ?
# GET /gastos?categoria=comida -> categoria = "comida"
@app.get("/gastos")
def listar_gastos(categoria: str | None = None):
if categoria is None:
return GASTOS
return [g for g in GASTOS if g["categoria"] == categoria]Un PARÁMETRO DE RUTA va entre llaves en la ruta (/gastos/{gasto_id}) y como parámetro tipado de la función
(gasto_id: int) —FastAPI lo extrae de la URL y valida que sea un entero (si mandas /gastos/abc, responde
error 422 automáticamente)—. Un PARÁMETRO DE CONSULTA es un parámetro de la función que NO está en la ruta
(categoria: str | None = None): FastAPI lo lee de la query string (?categoria=comida), y al tener valor por
defecto, es opcional. Los type hints hacen la validación: declaras el tipo, FastAPI lo verifica.
Recibir datos en el cuerpo
¿Dónde van los datos en cada caso: identificar un gasto, filtrar una lista, y crear un gasto nuevo?
Mini-reto
Amplía tu API (en tu Python instalado): 1) un endpoint GET /gastos/{gasto_id} que devuelva el gasto con ese
id de una lista, o un mensaje de error; 2) GET /gastos con un parámetro de consulta opcional
categoria: str | None = None que filtre; 3) POST /gastos que reciba un modelo con nombre y valor y lo
agregue a la lista devolviendo el creado con status_code=201. Pruébalos en /docs. Observa cómo FastAPI
valida los tipos solo.
Qué sigue
Ya recibes y devuelves datos. La próxima lección profundiza en la pieza que hace la validación: PYDANTIC —los modelos que definen la forma y las reglas de tus datos—. Es el mismo Zod que viste en TypeScript, en su versión Python, y el corazón de por qué FastAPI es tan seguro y cómodo.