Antes de empezar
- Una configuración de proveedor para el servicio, y un nodo executor que la referencia. Consulta Referenciar la configuración de proveedor desde un nodo del workflow.
- Los nombres de campo que espera el servicio. Cuando el documento OpenAPI del servicio está en el registro, Derivar un esquema de operación devuelve
inputSchema(el cuerpo de la solicitud de la operación) youtputSchema(su respuesta de éxito). Ambos te dan los nombres de campo que escribes como destinos y orígenes de mapeo. - Un workflow en estado
draft. Un workflow activo está bloqueado, así que usa Pasar un workflow a borrador antes de editar un nodo, y actívalo de nuevo después.
executorId en un nodo que llama a una operación de un documento OpenAPI cargado. Ese nodo nombra la operación con operation_path y operation_method. Flowker completa el executorId por ti, a partir de la configuración de proveedor a la que apunta el nodo, antes de validar el workflow. Lo hace cuando creas el workflow y cuando lo actualizas. Conectar tu propia API recorre toda esa vía. Los nodos de esta página nombran http, el conector HTTP genérico, que sí necesita un executorId explícito.Paso 1: conoce qué puede leer un mapeo
Cada mapeo lee del contexto del workflow, un único objeto JSON que crece a medida que avanza la ejecución:
source de mapeo es una ruta simple. No lo envuelvas en ${...}. Las llaves pertenecen a los campos de plantilla del nodo (body, headers, query, path), y dentro de un mapeo Flowker lee una cadena ${...} como un nombre de ruta literal que no selecciona nada.Paso 2: declara el mapeo de entrada
Los mapeos de entrada viven en un arreglo
inputMapping dentro del objeto data del nodo executor. Cada entrada mueve un valor al cuerpo de la solicitud saliente.
target exactamente como el servicio espera recibirlo: no hay objeto envolvente ni prefijo que agregar.
Ejemplo: mapear el payload del trigger a una verificación de fraude
Ejemplo: mapear el payload del trigger a una verificación de fraude
{"transactionId":"txn-98765","amount":1500.00,"customer":{"document":"12345678900"}}, el servicio recibe:Cuando un origen no selecciona nada
Una ruta de origen ausente del contexto no es un error. Flowker igual escribe el destino, con el valornull, y la solicitud sale.
Define required: true cuando el nodo no debe llamar al servicio sin un valor. Flowker entonces revisa cada ruta de origen de ese nodo antes de armar la solicitud, y hace fallar el paso cuando alguna de ellas está ausente. La ejecución se detiene con FLK-0504 y el paso informa input transformation failed.
required aplica al nodo, no a la única entrada que lo lleva. Si alguna entrada del inputMapping de un nodo define required: true, cada ruta de origen de ese arreglo debe resolverse. Para mantener algunos campos opcionales, deja required desactivado en todo el nodo.target una sola entrada. Cuando dos entradas escriben el mismo destino, gana la última.
Paso 3: decide qué arma el cuerpo de la solicitud
Un nodo tiene tres fuentes para el cuerpo de una solicitud. Solo
data.body es exclusivo: cuando está presente, es todo el cuerpo. Sin él, Flowker compone el cuerpo a partir de las otras dos fuentes, con la superposición del mapeo escrita sobre los literales de config:
data.body
${...} contra el contexto del workflow y envía el resultado. Mientras data.body esté presente, inputMapping, transforms y config no aportan nada al cuerpo.Cada referencia ${...} de aquí debe resolverse. Una que no lo hace hace fallar el nodo con FLK-0143, antes de que salga cualquier llamada (lo contrario de un origen de mapeo, que se resuelve como null). Usa data.body cuando un valor ausente debe detener el workflow, y un mapeo cuando la solicitud debe salir de todos modos.inputMapping o transforms
inputMapping. Cuando inputMapping está vacío, arma la superposición a partir de transforms. Los dos son mutuamente excluyentes: un nodo con al menos una entrada de inputMapping nunca corre sus transforms sobre la entrada.literales de config
data.config siembran el cuerpo. Con una superposición presente, los literales son la base y la superposición gana en cualquier clave que ambos definan. Por eso un nodo puede combinar valores fijos con valores mapeados. Sin superposición, los literales son el cuerpo por sí solos.config pueda sembrar el cuerpo, Flowker le quita estos nombres: method, path, url, endpointName, query, headers, auth, retry, timeout, timeout_seconds, request_format, success_status_codes, allowedHosts y allowedPrivateHosts. Por eso un nodo que deja el transporte en config por error no envía nada de eso al destino. Un bloque auth puesto ahí nunca puede viajar como contenido de la solicitud.
El nodo lee su propio transporte desde el nivel superior de su objeto data: path, endpointName, method, headers, query, auth, timeout_seconds, retry, success_status_codes y request_format. Las listas de hosts salientes permitidos no están entre ellos: configuras allowedHosts y allowedPrivateHosts en la configuración de proveedor, donde cada una aplica a cada nodo que llama a través de ella.
Ejemplo: valores fijos más valores mapeados
Ejemplo: valores fijos más valores mapeados
Paso 4: cambia la forma de un valor en tránsito
Cuando el servicio necesita un valor en otra forma, adjunta una
transformation a la entrada del mapeo. Se aplica al valor después de que aterriza en el destino.
type fuera de él falla cuando guardas el workflow, con FLK-0140.
Dos reglas para escribirlas:
- Actúan sobre texto. Un valor que no es texto llega al destino sin cambios.
- Los valores
prefixysuffixnecesitan al menos un carácter cada uno, y un solo espacio cuenta. El valorcharactersnecesita al menos un carácter que no sea un espacio, una tabulación ni un salto de línea. Un valor que no cumple esto hace fallar el paso en tiempo de ejecución conFLK-0504.
Ejemplo: normalizar un documento y estampar una referencia
Ejemplo: normalizar un documento y estampar una referencia
{"customer":{"document":"123.456.789-00","name":"ada lovelace"},"transactionId":"txn-98765"}, el nodo envía:Transformaciones de documento completo
Para el trabajo que el mapeo entrada por entrada no expresa (combinar dos campos, elegir el primer valor presente, rellenar un valor predeterminado), declara en su lugar un arreglotransforms. Cada operación lee todo el contexto del workflow y escribe toda la superposición.
Flowker acepta shift (mover o renombrar), concat (unir valores), coalesce (primer valor presente), default (rellenar una clave ausente), extract (subir un subárbol a la raíz), delete (quitar una clave), timestamp, uuid y pass. Los cinco tipos de transformación de arriba también están disponibles aquí. Como operaciones, toman la ruta de destino de la especificación en path.
Ejemplo: un shift y un default en un mismo nodo
Ejemplo: un shift y un default en un mismo nodo
require: true para exigir que exista cada ruta que su spec nombra, igual que funciona required en una entrada de mapeo.transforms corre solo cuando el nodo no tiene inputMapping. Usa uno u otro en un nodo dado, nunca ambos.Paso 5: lee de vuelta la respuesta
Los mapeos de salida extraen campos de la respuesta y los guardan en el contexto del workflow bajo el id del nodo, para que los nodos posteriores lean nombres cortos y estables. Decláralos en un arreglo
outputMapping dentro del data del nodo, con los mismos cuatro campos de entrada que un mapeo de entrada.
Un source de salida es una ruta hacia el envelope de la respuesta, no hacia el cuerpo de la respuesta:
body:
score-transaction, eso guarda:
${score-transaction.score} y ${score-transaction.httpStatus}.
Un nodo que no declara outputMapping guarda en su lugar el envelope completo bajo su id, y los nodos posteriores leen la ruta del envelope directamente: ${score-transaction.body.score}. Agrega un mapeo de salida cuando quieras el nombre más corto. Omítelo cuando la ruta del envelope sea suficientemente clara.
Un origen de salida que no selecciona nada se comporta como uno de entrada. Flowker guarda el destino como null a menos que una entrada de ese nodo defina required: true.
Paso 6: revisa el mapeo antes de llamar al servicio
Previsualizar una solicitud de executor usa las vías de mapeo, transformación y armado de la solicitud sin hacer una llamada de red al servicio. No lee el vault ni obtiene un token de autenticación. Enmascara los valores secretos suministrados y usa el catálogo de Flowker para resolver el proveedor y el executor. Ninguna credencial aparece en nada de lo que devuelve, incluido el
curl.
Envía el nodo, la configuración de proveedor a la que apunta y un payload de ejemplo. La configuración de proveedor va en la solicitud misma, así que la previsualización no necesita una configuración de proveedor guardada ni una lectura del vault. El catálogo del lado del servidor igual debe resolver el proveedor y el executor:
sampleInput se convierte en el payload del trigger, así que los orígenes del mapeo lo leen como workflow.*, exactamente como lo harán en tiempo de ejecución.
La respuesta es la solicitud armada:
Revisa la URL
path del nodo. Una ruta que no esperabas es un campo del nodo que hay que corregir, no un mapeo.Revisa el cuerpo contra los nombres de campo que espera el servicio
target aparezca donde el servicio lo quiere. Un campo que lleva null es una ruta source que no selecciona nada.Revisa unresolved
${...} de los campos de plantilla del nodo que tu payload de ejemplo no resolvió. Flowker las deja literales en la solicitud renderizada. Un arreglo vacío significa que cada referencia encontró un valor.config y, en mappedTargets, las rutas de destino que suministra tu inputMapping. Flowker las cuenta como satisfechas, así que un nodo que mapea un campo obligatorio desde el trigger pasa la verificación.
Qué sale mal
Qué sigue
Guía de integración
Configurar un trigger de webhook
workflow que leen tus mapeos.
