Inputs y Respuestas Tipadas¶
Estado verificado al 28 de marzo de 2026. Nota de runtime:
fastfn dev --nativerequiere runtimes en host;fastfn devusa Docker.
Complejidad¶
Intermedia
Tiempo¶
20-30 minutos
Resultado¶
Podés diseñar contratos de request/response estables en FastFN e implementar normalización de tipos explícita en rutas Python y Node.
Validación¶
- Levantá runtime local:
fastfn dev examples/functions. - Ejecutá una llamada con coerción tipada:
- Confirmá tipos de salida (
prioritynúmero,doneboolean). - Confirmá visibilidad en OpenAPI (
/openapi.json) cuando esté habilitado.
Solución de problemas¶
- Si aparece error de parseo JSON, verificá
Content-Typey formato del body. - Si faltan params, verificá naming de ruta en filesystem (
[id],[slug], etc.). - Si hay diferencias por runtime, normalizá explícitamente dentro del handler.
Modelo mental¶
FastFN te da un envelope estable de request y uno estable de response.
Request:
- Los params de ruta vienen del enrutamiento por archivos.
- Query, headers, cookies y body llegan en event.
- El body llega raw por defecto y se parsea explícitamente cuando hace falta.
Response:
- Devolvés status, headers, body.
- El body contiene tu payload de dominio tipado.
Patrones de inputs tipados¶
Params de ruta¶
La forma de la ruta es la primera pista de tipos.
Python:
Node:
Query + body¶
Normalizá tipos al principio del handler.
Python:
import json
def handler(event):
query = event.get("query") or {}
payload = json.loads(event.get("body") or "{}")
limit = int(query.get("limit", 10))
title = str(payload.get("title", "sin-titulo"))
done = bool(payload.get("done", False))
return {
"status": 200,
"body": {"limit": limit, "title": title, "done": done},
}
Node:
exports.handler = async (event) => {
const query = event.query || {};
const payload = JSON.parse(event.body || "{}");
const limit = Number(query.limit || 10);
const title = String(payload.title || "sin-titulo");
const done = Boolean(payload.done || false);
return {
status: 200,
body: { limit, title, done },
};
};
Metadata de request¶
Usá headers/cookies para auth, tracing, locale y política.
event.headers["authorization"]
event.headers["x-request-id"]
event.session.cookies
event.query
event.body
Patrones de respuestas tipadas¶
Envelope canónico:
Reglas prácticas:
- Definí status explícitamente.
- Usá headers para content type y política de respuesta.
- Mantené body mínimo, tipado y orientado a cliente.
Ejemplo end-to-end¶
curl -sS -X POST http://127.0.0.1:8080/tasks \
-H "Content-Type: application/json" \
-d '{"title":"Escribir docs","priority":"2","done":false}'
Body esperado:
Estrategia de validación¶
- Convertí primitivos temprano.
- Validá campos requeridos antes de lógica de negocio.
- Devolvé errores
400explícitos cuando falle la conversión. - Extraé validación compartida solo cuando realmente se reutilice.
Enlaces relacionados¶
- Inyección Directa de Params
- Enrutamiento por Archivos
- Metadata de Request y Archivos
- Desde Cero: Enrutamiento y Datos
- Desde Cero: Respuestas Avanzadas
- API HTTP