Gestionar FlowStreams con la API de Flow
Todo lo que hace el editor pasa por un único endpoint JSON: POST /fapi/ con el cuerpo { "schema": "<name>", "data": { ... } } (las rutas API de Total.js, consulta rutas API). La dirección /fapi/ sale de la línea $api : /fapi/ del archivo config. Todas las llamadas salvo el inicio de sesión necesitan la cookie de sesión; sin ella la respuesta es 401: Unauthorized.
Estas llamadas también se probaron contra un Flow 11.1 local (Node.js 24 y total5@0.0.19) mientras se escribía esta página.
Iniciar sesión
Auth|login recibe login y password y responde {"success":true} con la cookie de sesión. Un par incorrecto responde Invalid credentials.
curl -c cookie.txt -X POST http://localhost:8000/fapi/ \
-H 'content-type: application/json' \
-d '{"schema":"Auth|login","data":{"login":"<your login>","password":"<your password>"}}'Las siguientes llamadas usan -b cookie.txt.
Las llamadas
schema | data | Qué hace | ||
|---|---|---|---|---|
Streams | ninguno | la lista de FlowStreams con id, name, group, author, version, proxypath, size y las stats en vivo de los que se están ejecutando | ||
Streams\ | save | name, y opcionalmente author, version, icon, color, group, url, reference, readme, memory, cloning, proxypath, proxytimeout | crea un flujo cuando falta id (se comprueba el permiso create); si no, actualiza el flujo con ese id y lo reinicia | |
Streams\ | read | id | las propiedades de un flujo | |
Streams\ | raw | id | el objeto completo del flujo, con su diseño | |
Streams\ | export | id | el flujo como texto JSON en value, sin los campos internos (unixsocket, env, import, worker, asfiles) | |
Streams\ | import | data (el texto JSON) | crea un flujo nuevo a partir de una exportación (hasta 10 MB), con un id nuevo; un proxypath repetido se sustituye por uno aleatorio; responde {"success":true,"value":"<id>"} | |
Streams\ | pause | id, is (true o false) | pausa o reanuda un flujo en ejecución | |
Streams\ | restart | id | reinicia el flujo | |
Streams\ | remove | id | elimina el flujo y su carpeta (se comprueba el permiso remove) | |
Streams\ | stats | ninguno | los totales de la instalación: versiones de Node.js, Total.js y Flow, mensajes, pendientes, memoria y conexiones | |
Variables\ | read / Variables\ | save | id (opcional), data | las variables de un flujo, o las variables globales cuando id está vacío; al guardar se envían a los flujos en ejecución |
Console\ | read / Console\ | clear | ninguno | la consola de la aplicación |
CDN\ | clear | ninguno | borra la caché de los componentes de la interfaz descargados | |
Settings\ | read / Settings\ | save | los ajustes (consulta ajustes y archivos) | solo para el superadministrador |
Crear un flujo y ejecutarlo
Créalo y luego importa un diseño construido en el editor (un archivo JSON exportado) para iniciarlo:
curl -b cookie.txt -X POST http://localhost:8000/fapi/ \
-H 'content-type: application/json' \
-d '{"schema":"Streams|save","data":{"name":"Demo","author":"Me"}}'Un flujo exportado desde el editor lleva su design (las cajas y sus conexiones), sus components (el código de cada una) y sus variables.
Reglas de proxypath
Un flujo puede publicar rutas HTTP bajo una ruta propia. Flow añade las barras (demo pasa a ser /demo/), rechaza las rutas que pertenecen a Flow (/, /cdn/, /fapi/, /private/, /flows/, /designer/, /parts/, /forms/, /css/, /js/, /fonts/, /panels/) con Proxy endpoint contains reserved path y rechaza una ruta que ya use otro flujo. proxytimeout es el tiempo en segundos que se espera la respuesta del flujo (por defecto 120).
Llamadas desde fuera
| Ruta | Uso |
|---|---|
GET o POST /notify/{id}/ | envía una notificación al flujo con ese id (el cuerpo del POST está limitado a 1 MB); los componentes del flujo deciden qué hacer con ella. Responde {"success":true} |
+SOCKET /{id}/ | el WebSocket del editor para ese flujo (necesita la sesión) |
GET /private/?token=<token> | lista los archivos de la carpeta private/ cuando el token coincide con el token de los ajustes; diez tokens erróneos bloquean una dirección durante 15 minutos |
+POST /update/ | actualiza la aplicación desde un archivo .bundle; solo para la versión empaquetada |
Mantén el token en secreto, envía estas llamadas por HTTPS y pon Flow detrás de un proxy inverso cuando sea accesible desde Internet.