# Hantera FlowStreams med Flows API

> Logga in, lista, skapa, importera, exportera, pausa, starta om och ta bort FlowStreams med JSON-API:et på /fapi/, läs statistiken och variablerna och anropa ett flöde utifrån med dess notify-adress eller egen proxysökväg.

Framework: flow
Product: Flow (flow@11.1)
Language: sv
Content-SHA256: 9624d3042007af413c1f69dbb8876016f4382c259f27a99a7e089a5a69dfb37a
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Allt som editorn gör går genom en enda JSON-slutpunkt: `POST /fapi/` med kroppen `{ "schema": "<name>", "data": { ... } }` (Total.js API-rutter, se [API-rutter](/en/total5/api-routes/)). Adressen `/fapi/` kommer från raden `$api : /fapi/` i filen `config`. Varje anrop utom inloggningen behöver sessionscookien; utan den blir svaret `401: Unauthorized`.

De här anropen provades också mot ett lokalt Flow 11.1 (Node.js 24 och `total5@0.0.19`) medan den här sidan skrevs.

## Logga in

`Auth|login` tar `login` och `password` och svarar `{"success":true}` med sessionscookien. Ett felaktigt par svarar `Invalid credentials`.

```bash
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>"}}'
```

De följande anropen använder `-b cookie.txt`.

## Anropen

| `schema` | `data` | Vad det gör |
|---|---|---|
| `Streams` | ingen | listan över FlowStreams med `id`, `name`, `group`, `author`, `version`, `proxypath`, `size` och de levande `stats` för de körande |
| `Streams\|save` | `name`, och valfritt `author`, `version`, `icon`, `color`, `group`, `url`, `reference`, `readme`, `memory`, `cloning`, `proxypath`, `proxytimeout` | **skapar** ett flöde när `id` saknas (behörigheten *create* kontrolleras), annars uppdateras flödet med det `id` och startas om |
| `Streams\|read` | `id` | egenskaperna för ett flöde |
| `Streams\|raw` | `id` | hela flödesobjektet, med dess design |
| `Streams\|export` | `id` | flödet som JSON-text i `value`, utan de interna fälten (`unixsocket`, `env`, `import`, `worker`, `asfiles`) |
| `Streams\|import` | `data` (JSON-texten) | skapar ett **nytt** flöde från en export (upp till 10 MB), med ett nytt `id`; en upprepad `proxypath` ersätts med en slumpmässig; svarar `{"success":true,"value":"<id>"}` |
| `Streams\|pause` | `id`, `is` (`true` eller `false`) | pausar eller återupptar ett körande flöde |
| `Streams\|restart` | `id` | startar om flödet |
| `Streams\|remove` | `id` | tar bort flödet och dess mapp (behörigheten *remove* kontrolleras) |
| `Streams\|stats` | ingen | installationens summor: versioner av Node.js, Total.js och Flow, meddelanden, väntande, minne och anslutningar |
| `Variables\|read` / `Variables\|save` | `id` (valfritt), `data` | variablerna för ett flöde, eller de **globala** variablerna när `id` är tomt; att spara skickar dem till de körande flödena |
| `Console\|read` / `Console\|clear` | ingen | applikationens konsol |
| `CDN\|clear` | ingen | rensar cachen för nedladdade gränssnittskomponenter |
| `Settings\|read` / `Settings\|save` | inställningarna (se [inställningar och filer](/en/flow/settings-and-files/)) | endast för superadministratören |

## Skapa ett flöde och köra det

Skapa det och importera sedan en design som byggts i editorn (en exporterad JSON-fil) för att starta det:

```bash
curl -b cookie.txt -X POST http://localhost:8000/fapi/ \
  -H 'content-type: application/json' \
  -d '{"schema":"Streams|save","data":{"name":"Demo","author":"Me"}}'
```

Ett flöde som exporterats från editorn bär sin `design` (rutorna och deras anslutningar), sina `components` (källkoden för varje) och sina `variables`.

## Regler för `proxypath`

Ett flöde kan publicera HTTP-rutter under en egen sökväg. Flow lägger till snedstrecken (`demo` blir `/demo/`), avvisar de sökvägar som tillhör Flow själv (`/`, `/cdn/`, `/fapi/`, `/private/`, `/flows/`, `/designer/`, `/parts/`, `/forms/`, `/css/`, `/js/`, `/fonts/`, `/panels/`) med `Proxy endpoint contains reserved path` och avvisar en sökväg som ett annat flöde redan använder. `proxytimeout` är tiden i sekunder att vänta på flödets svar (standard `120`).

## Anrop utifrån

| Rutt | Användning |
|---|---|
| `GET` eller `POST /notify/{id}/` | skickar en notifiering till flödet med det id:t (POST-kroppen är begränsad till 1 MB); flödets komponenter bestämmer vad de gör med den. Svarar `{"success":true}` |
| `+SOCKET /{id}/` | editorns WebSocket för det flödet (kräver sessionen) |
| `GET /private/?token=<token>` | listar filerna i mappen `private/` när token är lika med `token` i inställningarna; tio felaktiga tokens blockerar en adress i 15 minuter |
| `+POST /update/` | uppdaterar applikationen från en `.bundle`-fil; endast för den paketerade versionen |

Håll `token` hemlig, skicka dessa anrop över HTTPS och lägg Flow bakom en omvänd proxy när det är nåbart från internet.
