# Управление на FlowStreams с API на Flow

> Влезте, изброявайте, създавайте, импортирайте, експортирайте, паузирайте, рестартирайте и премахвайте FlowStreams с JSON API на /fapi/, четете статистиката и променливите и извиквайте поток отвън чрез неговия адрес notify или собствен proxy път.

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

Всичко, което прави редакторът, минава през една JSON крайна точка: `POST /fapi/` с тяло `{ "schema": "<name>", "data": { ... } }` (API маршрутите на Total.js, вижте [API маршрути](/en/total5/api-routes/)). Адресът `/fapi/` идва от реда `$api : /fapi/` във файла `config`. Всяко извикване освен входа изисква бисквитката на сесията; без нея отговорът е `401: Unauthorized`.

Тези извиквания бяха опитани и срещу локален Flow 11.1 (Node.js 24 и `total5@0.0.19`) докато се пишеше тази страница.

## Вход

`Auth|login` приема `login` и `password` и отговаря `{"success":true}` с бисквитката на сесията. Грешна двойка отговаря `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>"}}'
```

Следващите извиквания използват `-b cookie.txt`.

## Извикванията

| `schema` | `data` | Какво прави |
|---|---|---|
| `Streams` | няма | списъкът с FlowStreams с `id`, `name`, `group`, `author`, `version`, `proxypath`, `size` и живите `stats` на работещите |
| `Streams\|save` | `name`, и по избор `author`, `version`, `icon`, `color`, `group`, `url`, `reference`, `readme`, `memory`, `cloning`, `proxypath`, `proxytimeout` | **създава** поток, когато липсва `id` (проверява се правото *create*), иначе обновява потока с този `id` и го рестартира |
| `Streams\|read` | `id` | свойствата на един поток |
| `Streams\|raw` | `id` | целият обект на потока с неговия дизайн |
| `Streams\|export` | `id` | потокът като JSON текст в `value`, без вътрешните полета (`unixsocket`, `env`, `import`, `worker`, `asfiles`) |
| `Streams\|import` | `data` (JSON текстът) | създава **нов** поток от експорт (до 10 MB) с нов `id`; повторен `proxypath` се заменя със случаен; отговаря `{"success":true,"value":"<id>"}` |
| `Streams\|pause` | `id`, `is` (`true` или `false`) | паузира или възобновява работещ поток |
| `Streams\|restart` | `id` | рестартира потока |
| `Streams\|remove` | `id` | премахва потока и неговата папка (проверява се правото *remove*) |
| `Streams\|stats` | няма | общите стойности на инсталацията: версии на Node.js, Total.js и Flow, съобщения, чакащи, памет и връзки |
| `Variables\|read` / `Variables\|save` | `id` (по избор), `data` | променливите на един поток или **глобалните** променливи, когато `id` е празно; записването ги изпраща на работещите потоци |
| `Console\|read` / `Console\|clear` | няма | конзолата на приложението |
| `CDN\|clear` | няма | изчиства кеша на изтеглените компоненти на интерфейса |
| `Settings\|read` / `Settings\|save` | настройките (вижте [настройки и файлове](/en/flow/settings-and-files/)) | само за супер администратора |

## Създаване на поток и стартирането му

Създайте го и после импортирайте дизайн, изграден в редактора (експортиран JSON файл), за да го стартирате:

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

Поток, експортиран от редактора, носи своя `design` (кутиите и връзките им), своите `components` (изходния код на всеки) и своите `variables`.

## Правила за `proxypath`

Потокът може да публикува HTTP маршрути под собствен път. Flow добавя наклонените черти (`demo` става `/demo/`), отхвърля пътищата, които принадлежат на самия Flow (`/`, `/cdn/`, `/fapi/`, `/private/`, `/flows/`, `/designer/`, `/parts/`, `/forms/`, `/css/`, `/js/`, `/fonts/`, `/panels/`) с `Proxy endpoint contains reserved path` и отхвърля път, който вече използва друг поток. `proxytimeout` е времето в секунди за изчакване на отговора на потока (по подразбиране `120`).

## Извиквания отвън

| Маршрут | Употреба |
|---|---|
| `GET` или `POST /notify/{id}/` | изпраща известие на потока с този id (тялото на POST е ограничено до 1 MB); компонентите на потока решават какво да правят с него. Отговаря `{"success":true}` |
| `+SOCKET /{id}/` | WebSocket на редактора за този поток (изисква сесия) |
| `GET /private/?token=<token>` | изброява файловете в папката `private/`, когато токенът е равен на `token` от настройките; десет грешни токена блокират адрес за 15 минути |
| `+POST /update/` | обновява приложението от файл `.bundle`; само за пакетираната версия |

Пазете `token` в тайна, изпращайте тези извиквания през HTTPS и поставете Flow зад обратен прокси, когато е достъпен от интернет.
