Gérer les FlowStreams avec l’API de Flow
Tout ce que fait l’éditeur passe par un seul point d’accès JSON : POST /fapi/ avec le corps { "schema": "<name>", "data": { ... } } (les routes API de Total.js, voir routes API). L’adresse /fapi/ vient de la ligne $api : /fapi/ du fichier config. Tous les appels sauf la connexion ont besoin du cookie de session ; sans lui la réponse est 401: Unauthorized.
Ces appels ont aussi été essayés contre un Flow 11.1 local (Node.js 24 et total5@0.0.19) pendant la rédaction de cette page.
Se connecter
Auth|login prend login et password et répond {"success":true} avec le cookie de session. Un mauvais couple répond 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>"}}'Les appels suivants utilisent -b cookie.txt.
Les appels
schema | data | Ce qu’il fait | ||
|---|---|---|---|---|
Streams | aucune | la liste des FlowStreams avec id, name, group, author, version, proxypath, size et les stats en direct de ceux qui tournent | ||
Streams\ | save | name, et éventuellement author, version, icon, color, group, url, reference, readme, memory, cloning, proxypath, proxytimeout | crée un flux quand id manque (la permission create est vérifiée), sinon met à jour le flux portant cet id et le redémarre | |
Streams\ | read | id | les propriétés d’un flux | |
Streams\ | raw | id | l’objet complet du flux, avec son design | |
Streams\ | export | id | le flux sous forme de texte JSON dans value, sans les champs internes (unixsocket, env, import, worker, asfiles) | |
Streams\ | import | data (le texte JSON) | crée un nouveau flux à partir d’un export (jusqu’à 10 Mo), avec un nouvel id ; un proxypath répété est remplacé par un chemin aléatoire ; répond {"success":true,"value":"<id>"} | |
Streams\ | pause | id, is (true ou false) | met en pause ou reprend un flux en cours | |
Streams\ | restart | id | redémarre le flux | |
Streams\ | remove | id | supprime le flux et son dossier (la permission remove est vérifiée) | |
Streams\ | stats | aucune | les totaux de l’installation : versions de Node.js, Total.js et Flow, messages, en attente, mémoire et connexions | |
Variables\ | read / Variables\ | save | id (facultatif), data | les variables d’un flux, ou les variables globales quand id est vide ; l’enregistrement les pousse vers les flux en cours |
Console\ | read / Console\ | clear | aucune | la console de l’application |
CDN\ | clear | aucune | vide le cache des composants d’interface téléchargés | |
Settings\ | read / Settings\ | save | les réglages (voir réglages et fichiers) | uniquement pour le super-administrateur |
Créer un flux et l’exécuter
Créez-le, puis importez un design construit dans l’éditeur (un fichier JSON exporté) pour le démarrer :
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 flux exporté depuis l’éditeur contient son design (les boîtes et leurs connexions), ses components (le source de chacun) et ses variables.
Règles de proxypath
Un flux peut publier des routes HTTP sous un chemin qui lui est propre. Flow ajoute les barres obliques (demo devient /demo/), rejette les chemins qui appartiennent à Flow lui-même (/, /cdn/, /fapi/, /private/, /flows/, /designer/, /parts/, /forms/, /css/, /js/, /fonts/, /panels/) avec Proxy endpoint contains reserved path, et rejette un chemin déjà utilisé par un autre flux. proxytimeout est le temps en secondes à attendre pour la réponse du flux (par défaut 120).
Appels depuis l’extérieur
| Route | Usage |
|---|---|
GET ou POST /notify/{id}/ | envoie une notification au flux portant cet id (le corps du POST est limité à 1 Mo) ; les composants du flux décident quoi en faire. Répond {"success":true} |
+SOCKET /{id}/ | le WebSocket de l’éditeur pour ce flux (il faut la session) |
GET /private/?token=<token> | liste les fichiers du dossier private/ quand le jeton est égal au token des réglages ; dix mauvais jetons bloquent une adresse pendant 15 minutes |
+POST /update/ | met à jour l’application à partir d’un fichier .bundle ; uniquement pour la version empaquetée |
Gardez le token secret, envoyez ces appels en HTTPS et placez Flow derrière un proxy inverse quand il est accessible depuis Internet.