# FlowStreams beheren met de Flow-API

> Meld je aan, toon, maak, importeer, exporteer, pauzeer, herstart en verwijder FlowStreams met de JSON-API op /fapi/, lees de statistieken en variabelen en roep een stream van buitenaf aan via zijn notify-adres of zijn eigen proxypad.

Framework: flow
Product: Flow (flow@11.1)
Language: nl
Content-SHA256: f6d7edc6f6f4bf1709d6eae881ede080f50a132fef5554825cdae26db2b2afe7
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Alles wat de editor doet, loopt via één JSON-endpoint: `POST /fapi/` met de body `{ "schema": "<name>", "data": { ... } }` (de API-routes van Total.js, zie [API-routes](/en/total5/api-routes/)). Het adres `/fapi/` komt uit de regel `$api : /fapi/` van het bestand `config`. Elke aanroep behalve de aanmelding heeft de sessiecookie nodig; zonder is het antwoord `401: Unauthorized`.

Deze aanroepen zijn tijdens het schrijven van deze pagina ook uitgeprobeerd op een lokale Flow 11.1 (Node.js 24 en `total5@0.0.19`).

## Aanmelden

`Auth|login` neemt `login` en `password` en antwoordt `{"success":true}` met de sessiecookie. Een verkeerd paar antwoordt `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 volgende aanroepen gebruiken `-b cookie.txt`.

## De aanroepen

| `schema` | `data` | Wat het doet |
|---|---|---|
| `Streams` | geen | de lijst met FlowStreams met `id`, `name`, `group`, `author`, `version`, `proxypath`, `size` en de live `stats` van de draaiende |
| `Streams\|save` | `name`, en optioneel `author`, `version`, `icon`, `color`, `group`, `url`, `reference`, `readme`, `memory`, `cloning`, `proxypath`, `proxytimeout` | **maakt** een stream aan wanneer `id` ontbreekt (het recht *create* wordt gecontroleerd), anders werkt het de stream met die `id` bij en herstart hem |
| `Streams\|read` | `id` | de eigenschappen van één stream |
| `Streams\|raw` | `id` | het hele streamobject, met zijn ontwerp |
| `Streams\|export` | `id` | de stream als JSON-tekst in `value`, zonder de interne velden (`unixsocket`, `env`, `import`, `worker`, `asfiles`) |
| `Streams\|import` | `data` (de JSON-tekst) | maakt een **nieuwe** stream uit een export (tot 10 MB), met een nieuwe `id`; een herhaalde `proxypath` wordt vervangen door een willekeurige; antwoordt `{"success":true,"value":"<id>"}` |
| `Streams\|pause` | `id`, `is` (`true` of `false`) | pauzeert of hervat een draaiende stream |
| `Streams\|restart` | `id` | herstart de stream |
| `Streams\|remove` | `id` | verwijdert de stream en zijn map (het recht *remove* wordt gecontroleerd) |
| `Streams\|stats` | geen | de totalen van de installatie: versies van Node.js, Total.js en Flow, berichten, wachtend, geheugen en verbindingen |
| `Variables\|read` / `Variables\|save` | `id` (optioneel), `data` | de variabelen van één stream, of de **globale** variabelen wanneer `id` leeg is; opslaan stuurt ze naar de draaiende streams |
| `Console\|read` / `Console\|clear` | geen | de console van de toepassing |
| `CDN\|clear` | geen | wist de cache van de gedownloade interfacecomponenten |
| `Settings\|read` / `Settings\|save` | de instellingen (zie [instellingen en bestanden](/en/flow/settings-and-files/)) | alleen voor de superbeheerder |

## Een stream maken en starten

Maak hem aan en importeer daarna een in de editor gebouwd ontwerp (een geëxporteerd JSON-bestand) om hem te starten:

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

Een uit de editor geëxporteerde stream bevat zijn `design` (de vakken en hun verbindingen), zijn `components` (de bron van elk) en zijn `variables`.

## Regels van `proxypath`

Een stream kan HTTP-routes publiceren onder een eigen pad. Flow voegt de schuine strepen toe (`demo` wordt `/demo/`), wijst de paden af die van Flow zelf zijn (`/`, `/cdn/`, `/fapi/`, `/private/`, `/flows/`, `/designer/`, `/parts/`, `/forms/`, `/css/`, `/js/`, `/fonts/`, `/panels/`) met `Proxy endpoint contains reserved path` en wijst een pad af dat een andere stream al gebruikt. `proxytimeout` is de tijd in seconden die op het antwoord van de stream wordt gewacht (standaard `120`).

## Aanroepen van buitenaf

| Route | Gebruik |
|---|---|
| `GET` of `POST /notify/{id}/` | stuurt een melding naar de stream met die id (de POST-body is beperkt tot 1 MB); de componenten van de stream bepalen wat ze ermee doen. Antwoordt `{"success":true}` |
| `+SOCKET /{id}/` | de WebSocket van de editor voor die stream (vereist de sessie) |
| `GET /private/?token=<token>` | toont de bestanden van de map `private/` wanneer het token gelijk is aan het `token` van de instellingen; tien verkeerde tokens blokkeren een adres gedurende 15 minuten |
| `+POST /update/` | werkt de toepassing bij vanuit een `.bundle`-bestand; alleen voor de gebundelde versie |

Houd het `token` geheim, stuur deze aanroepen via HTTPS en zet Flow achter een reverse proxy wanneer het vanaf internet bereikbaar is.
