Zarządzanie FlowStreamami przez API Flow
Wszystko, co robi edytor, przechodzi przez jeden endpoint JSON: POST /fapi/ z treścią { "schema": "<name>", "data": { ... } } (trasy API Total.js, zobacz trasy API). Adres /fapi/ pochodzi z wiersza $api : /fapi/ pliku config. Każde wywołanie poza logowaniem wymaga ciasteczka sesji; bez niego odpowiedzią jest 401: Unauthorized.
Te wywołania wypróbowano także na lokalnym Flow 11.1 (Node.js 24 i total5@0.0.19) podczas pisania tej strony.
Logowanie
Auth|login przyjmuje login i password i odpowiada {"success":true} wraz z ciasteczkiem sesji. Błędna para odpowiada 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>"}}'Kolejne wywołania używają -b cookie.txt.
Wywołania
schema | data | Co robi | ||
|---|---|---|---|---|
Streams | brak | lista FlowStreamów z id, name, group, author, version, proxypath, size i bieżącymi stats uruchomionych | ||
Streams\ | save | name, i opcjonalnie author, version, icon, color, group, url, reference, readme, memory, cloning, proxypath, proxytimeout | tworzy przepływ, gdy brakuje id (sprawdzane jest uprawnienie create), w przeciwnym razie aktualizuje przepływ o tym id i restartuje go | |
Streams\ | read | id | właściwości jednego przepływu | |
Streams\ | raw | id | cały obiekt przepływu wraz z projektem | |
Streams\ | export | id | przepływ jako tekst JSON w value, bez pól wewnętrznych (unixsocket, env, import, worker, asfiles) | |
Streams\ | import | data (tekst JSON) | tworzy nowy przepływ z eksportu (do 10 MB) z nowym id; powtórzony proxypath jest zastępowany losowym; odpowiada {"success":true,"value":"<id>"} | |
Streams\ | pause | id, is (true lub false) | wstrzymuje lub wznawia działający przepływ | |
Streams\ | restart | id | restartuje przepływ | |
Streams\ | remove | id | usuwa przepływ i jego folder (sprawdzane jest uprawnienie remove) | |
Streams\ | stats | brak | sumy instalacji: wersje Node.js, Total.js i Flow, wiadomości, oczekujące, pamięć i połączenia | |
Variables\ | read / Variables\ | save | id (opcjonalne), data | zmienne jednego przepływu albo zmienne globalne, gdy id jest puste; zapis wysyła je do działających przepływów |
Console\ | read / Console\ | clear | brak | konsola aplikacji |
CDN\ | clear | brak | czyści pamięć podręczną pobranych komponentów interfejsu | |
Settings\ | read / Settings\ | save | ustawienia (zobacz ustawienia i pliki) | tylko dla superadministratora |
Utworzenie przepływu i jego uruchomienie
Utwórz go, a potem zaimportuj projekt zbudowany w edytorze (wyeksportowany plik JSON), aby go uruchomić:
curl -b cookie.txt -X POST http://localhost:8000/fapi/ \
-H 'content-type: application/json' \
-d '{"schema":"Streams|save","data":{"name":"Demo","author":"Me"}}'Przepływ wyeksportowany z edytora niesie swój design (pola i ich połączenia), swoje components (źródło każdego z nich) i swoje variables.
Zasady proxypath
Przepływ może publikować trasy HTTP pod własną ścieżką. Flow dodaje ukośniki (demo staje się /demo/), odrzuca ścieżki należące do samego Flow (/, /cdn/, /fapi/, /private/, /flows/, /designer/, /parts/, /forms/, /css/, /js/, /fonts/, /panels/) komunikatem Proxy endpoint contains reserved path i odrzuca ścieżkę, której używa już inny przepływ. proxytimeout to czas w sekundach oczekiwania na odpowiedź przepływu (domyślnie 120).
Wywołania z zewnątrz
| Trasa | Zastosowanie |
|---|---|
GET lub POST /notify/{id}/ | wysyła powiadomienie do przepływu o tym id (treść POST ograniczona do 1 MB); komponenty przepływu decydują, co z nim zrobić. Odpowiada {"success":true} |
+SOCKET /{id}/ | WebSocket edytora dla tego przepływu (wymaga sesji) |
GET /private/?token=<token> | wyświetla pliki folderu private/, gdy token jest równy token z ustawień; dziesięć błędnych tokenów blokuje adres na 15 minut |
+POST /update/ | aktualizuje aplikację z pliku .bundle; tylko dla wersji spakowanej |
Zachowaj token w tajemnicy, wysyłaj te wywołania przez HTTPS i umieść Flow za odwrotnym proxy, gdy jest dostępny z Internetu.