Ir al contenido

Template — Webhook API Gateway

Este template muestra cómo construir un API gateway REST completo en Floogos usando dos nodos: Webhook Router (divide el tráfico por verbo) y Webhook Filter (valida cada rama). El resultado se comporta como un endpoint HTTP real que soporta GET, POST, PUT y DELETE.

API Gateway por método

Cada rama es independiente. Agregar un nuevo verbo es tan simple como conectar otro handle.


Arrastra un nodo Webhook al canvas. Este es tu único punto de entrada a la API — una URL maneja todos los métodos.

No se necesita configuración especial. El webhook captura automáticamente el método HTTP y lo pasa como data._request.method.


Arrastra un nodo Webhook Router y conéctalo a la salida del Webhook.

Este nodo no tiene configuración — solo conecta los handles de salida:

HandleConectar a
GETWebhook Filter de la rama GET
POSTWebhook Filter de la rama POST
PUTWebhook Filter de la rama PUT
DELETEWebhook Filter de la rama DELETE
DefaultWeb Response (405)

Agrega un Webhook Filter por rama para validar el payload antes de que corra la lógica de negocio.

{
"allowGET": true,
"requiredFields": [],
"errorCode": "400",
"errorBody": {}
}

Las peticiones GET frecuentemente no tienen campos de body obligatorios. Deja requiredFields vacío si los parámetros son opcionales.

{
"allowPOST": true,
"requiredFields": ["name", "email"],
"errorCode": "422",
"errorBody": {
"success": false,
"message": "Faltan campos requeridos: name y email son obligatorios."
}
}
{
"allowPUT": true,
"requiredFields": ["id", "name"],
"errorCode": "422",
"errorBody": {
"success": false,
"message": "Faltan campos requeridos: id y name son obligatorios para actualizar."
}
}
{
"allowDELETE": true,
"requiredFields": ["id"],
"errorCode": "400",
"errorBody": {
"success": false,
"message": "El campo 'id' es requerido para eliminar."
}
}

:::note Un método por filtro Cada Webhook Filter debería tener habilitado un solo método (el que corresponde a su rama). El Router ya garantiza que solo el método correcto llega a cada rama, pero tener un único método habilitado hace la intención explícita. :::


Después de cada Webhook Filter, agrega los nodos que realizan el trabajo real.

Ejemplo rama GET — consultar base de datos:

Webhook Filter → SQL Query (SELECT * WHERE id = {{data.id}}) → Web Response 200

Ejemplo rama POST — insertar registro:

Webhook Filter → EditFields (formatear datos) → SQL Query (INSERT) → Web Response 201

Ejemplo rama PUT — actualizar registro:

Webhook Filter → SQL Query (UPDATE WHERE id = {{data.id}}) → Web Response 200

Ejemplo rama DELETE — eliminar registro:

Webhook Filter → SQL Query (DELETE WHERE id = {{data.id}}) → Web Response 204

Agrega un Web Response al final de cada rama con el código HTTP apropiado.

RamaCódigo HTTPBody típico
GET (encontrado)200Datos del resultado
GET (no encontrado)404{ "error": "No encontrado" }
POST (creado)201Registro creado
PUT (actualizado)200Registro actualizado
DELETE (eliminado)204(body vacío)
Default (método incorrecto)405{ "error": "Método no permitido" }

Configuración Web Response 405 (rama Default):

{
"code_response": 405,
"body_response": {
"error": true,
"message": "Método no permitido. Métodos soportados: GET, POST, PUT, DELETE."
},
"headers": {
"Allow": "GET, POST, PUT, DELETE"
}
}

NodoCantidadFunción
Webhook1Punto de entrada único
Webhook Router1Divide el tráfico por método HTTP
Webhook Filter4Valida el payload por rama
[Nodos de lógica]4+SQL Query, HTTP, DataStore, etc.
Web Response5+Devuelve respuestas HTTP

Usa Postman, curl o cualquier cliente HTTP para probar cada rama:

Ventana de terminal
# GET — listar elementos
curl -X GET https://tu-webhook-url
# POST — crear elemento
curl -X POST https://tu-webhook-url \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "email": "alice@ejemplo.com"}'
# PUT — actualizar elemento
curl -X PUT https://tu-webhook-url \
-H "Content-Type: application/json" \
-d '{"id": 42, "name": "Alice Actualizada"}'
# DELETE — eliminar elemento
curl -X DELETE https://tu-webhook-url \
-H "Content-Type: application/json" \
-d '{"id": 42}'
# PATCH — debería devolver 405
curl -X PATCH https://tu-webhook-url

Comportamiento esperado:

PeticiónRespuesta esperada
GET200 + datos
POST con name+email201 + registro creado
POST sin email422 + mensaje de error
PUT con id+name200 + registro actualizado
DELETE con id204
PATCH405 Method Not Allowed

Variación A — Solo Filter sin Router (API más simple)

Sección titulada «Variación A — Solo Filter sin Router (API más simple)»

Si solo aceptas POST:

Webhook → Webhook Filter (allowPOST, requiredFields) → Lógica → Web Response

Usa el Webhook Router solo cuando necesites manejar múltiples métodos en el mismo endpoint.

Agrega un nodo HTTP Request antes del Router para llamar a un servicio de auth:

Gateway con autenticación

Variación C — Rate limiting con DataStore

Sección titulada «Variación C — Rate limiting con DataStore»

Gateway con rate limit