Gerir FlowStreams com a API do Flow
Tudo o que o editor faz passa por um único endpoint JSON: POST /fapi/ com o corpo { "schema": "<name>", "data": { ... } } (as rotas API do Total.js, veja rotas API). O endereço /fapi/ vem da linha $api : /fapi/ do ficheiro config. Todas as chamadas exceto o início de sessão precisam do cookie de sessão; sem ele a resposta é 401: Unauthorized.
Estas chamadas também foram testadas contra um Flow 11.1 local (Node.js 24 e total5@0.0.19) enquanto esta página era escrita.
Iniciar sessão
Auth|login recebe login e password e responde {"success":true} com o cookie de sessão. Um par errado 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>"}}'As chamadas seguintes usam -b cookie.txt.
As chamadas
schema | data | O que faz | ||
|---|---|---|---|---|
Streams | nenhum | a lista de FlowStreams com id, name, group, author, version, proxypath, size e as stats em direto dos que estão a correr | ||
Streams\ | save | name, e opcionalmente author, version, icon, color, group, url, reference, readme, memory, cloning, proxypath, proxytimeout | cria um fluxo quando falta id (verifica-se a permissão create); caso contrário atualiza o fluxo com esse id e reinicia-o | |
Streams\ | read | id | as propriedades de um fluxo | |
Streams\ | raw | id | o objeto completo do fluxo, com o seu design | |
Streams\ | export | id | o fluxo como texto JSON em value, sem os campos internos (unixsocket, env, import, worker, asfiles) | |
Streams\ | import | data (o texto JSON) | cria um fluxo novo a partir de uma exportação (até 10 MB), com um id novo; um proxypath repetido é substituído por um aleatório; responde {"success":true,"value":"<id>"} | |
Streams\ | pause | id, is (true ou false) | pausa ou retoma um fluxo em execução | |
Streams\ | restart | id | reinicia o fluxo | |
Streams\ | remove | id | remove o fluxo e a sua pasta (verifica-se a permissão remove) | |
Streams\ | stats | nenhum | os totais da instalação: versões do Node.js, Total.js e Flow, mensagens, pendentes, memória e ligações | |
Variables\ | read / Variables\ | save | id (opcional), data | as variáveis de um fluxo, ou as variáveis globais quando id está vazio; ao gravar são enviadas aos fluxos em execução |
Console\ | read / Console\ | clear | nenhum | a consola da aplicação |
CDN\ | clear | nenhum | limpa a cache dos componentes da interface descarregados | |
Settings\ | read / Settings\ | save | as definições (veja definições e ficheiros) | apenas para o superadministrador |
Criar um fluxo e executá-lo
Crie-o e depois importe um design construído no editor (um ficheiro JSON exportado) para o iniciar:
curl -b cookie.txt -X POST http://localhost:8000/fapi/ \
-H 'content-type: application/json' \
-d '{"schema":"Streams|save","data":{"name":"Demo","author":"Me"}}'Um fluxo exportado do editor leva o seu design (as caixas e as suas ligações), os seus components (o código de cada um) e as suas variables.
Regras de proxypath
Um fluxo pode publicar rotas HTTP sob um caminho próprio. O Flow acrescenta as barras (demo passa a /demo/), rejeita os caminhos que pertencem ao próprio Flow (/, /cdn/, /fapi/, /private/, /flows/, /designer/, /parts/, /forms/, /css/, /js/, /fonts/, /panels/) com Proxy endpoint contains reserved path e rejeita um caminho que outro fluxo já use. proxytimeout é o tempo em segundos a esperar pela resposta do fluxo (a predefinição é 120).
Chamadas a partir de fora
| Rota | Utilização |
|---|---|
GET ou POST /notify/{id}/ | envia uma notificação ao fluxo com esse id (o corpo do POST está limitado a 1 MB); os componentes do fluxo decidem o que fazer com ela. Responde {"success":true} |
+SOCKET /{id}/ | o WebSocket do editor para esse fluxo (precisa da sessão) |
GET /private/?token=<token> | lista os ficheiros da pasta private/ quando o token é igual ao token das definições; dez tokens errados bloqueiam um endereço durante 15 minutos |
+POST /update/ | atualiza a aplicação a partir de um ficheiro .bundle; apenas para a versão empacotada |
Mantenha o token em segredo, envie estas chamadas por HTTPS e ponha o Flow atrás de um proxy inverso quando estiver acessível a partir da Internet.