Документация API

Публичное API для интеграций: доступ к данным, файлам и бэкенд-сервисам через единую точку входа.

Документация для версии 1.0.6. На этой странице описаны публичные маршруты для внешних интеграций. Полная интерактивная документация (Admin и Public API, фильтры по источнику, Try it out) — в админ-панели: /admin/api-explorer. В 1.0.6 исправлено стабильное переключение фильтров источника API.

1. Обзор публичного API

КАСКАД 360 предоставляет HTTP JSON API для подключения внешних приложений, мобильных клиентов и сервисов. Ядро не требует сессии администратора для публичных маршрутов — доступ контролируется API-ключами или JWT-токенами с ограниченными правами.

Базовый URL

ОкружениеURL
Локальный запускhttp://localhost:5000
Docker Compose (если настроен)http://localhost:3535

Группы публичного API

ПрефиксАутентификацияНазначение
/api/v1/db/*API-ключ (X-API-Key)Чтение и изменение данных в подключённых БД
/api/v1/files/*API-ключ или JWT (Authorization: Bearer)Загрузка, скачивание и метаданные файлов
/api/module/*Не требуется на уровне ядра*Проксирование запросов к бэкенд-сервисам
/api/health, /api/statusНе требуетсяПроверка доступности платформы

* Бэкенд-сервис может реализовать собственную авторизацию для бизнес-логики.

Типовой формат ответа

{
  "success": true,
  "data": { ... }
}

{
  "success": false,
  "error": "Описание ошибки"
}

Интерактивная спецификация

На развёрнутом экземпляре доступны:

Legacy-адрес /api/v1/admin/docs перенаправляет в API Explorer.

2. Аутентификация

Для публичного API используются два механизма. Сессия администратора (cookie после входа в панель) в интеграциях не применяется.

2.1. API-ключ

Ключ выдается администратором платформы в разделе управления API-ключами. Передавайте его в заголовке или query-параметре:

X-API-Key: your-api-key

# альтернатива
GET /api/v1/db/datasources?api_key=your-api-key

Ключ содержит набор разрешений. Для работы с БД нужны db:query или db:*; для файлов — files:upload, files:download или files:*.

2.2. JWT-токен (для API файлов)

Для сценариев, где файлы связаны с учётной записью пользователя, используйте JWT access token в заголовке:

Authorization: Bearer <access_token>

Токены выдаются по учётным данным пользователя:

POST /api/v1/admin/auth/token

Возвращает access_token и refresh_token. Endpoint технически находится в пространстве auth, но предназначен для интеграций, а не для управления панелью.

{
  "username": "user@example.com",
  "password": "your-password"
}

Обновление access token:

POST /api/v1/admin/auth/token/refresh
{ "refresh_token": "..." }

3. API доступа к БД (/api/v1/db/*)

Назначение: интеграции с данными без прямого подключения к БД. Все маршруты требуют API-ключ с правами db:query или db:*.

Важно: произвольный SQL (query в теле запроса) отключён. Используйте параметризованный контракт entity + action — он защищён от SQL injection и не позволяет DDL-операции.

3.1. Выполнение запроса

POST /api/v1/db/query

Параметризованные операции select, insert, update, delete по имени таблицы (сущности).

Выборка (select)

{
  "entity": "products",
  "action": "select",
  "fields": ["id", "name", "price"],
  "filters": [
    {"field": "status", "op": "eq", "value": "active"},
    {"field": "price", "op": "gte", "value": 100, "boolean": "and"}
  ],
  "sort": [{"field": "id", "direction": "desc"}],
  "limit": 50,
  "offset": 0,
  "datasource_id": "core",
  "database": "shop"
}

Вставка (insert)

{
  "entity": "orders",
  "action": "insert",
  "data": {"user_id": 42, "total": 1500},
  "datasource_id": "core",
  "database": "shop"
}

Обновление и удаление

Для update и delete поле filters обязательно — операции без условий отклоняются.

{
  "entity": "orders",
  "action": "update",
  "data": {"status": "shipped"},
  "filters": [{"field": "id", "op": "eq", "value": 1001}],
  "datasource_id": "core",
  "database": "shop"
}

Поддерживаемые операторы фильтров (op)

ОператорОписание
eq, neРавно / не равно
gt, gte, lt, lteСравнение
likeШаблон LIKE
in, not_inВхождение в список (value — массив)
is_null, is_not_nullПроверка NULL (без value)

Пример ответа

{
  "success": true,
  "data": [
    {"id": 1, "name": "Товар", "price": 199}
  ],
  "row_count": 1
}

3.2. Транзакции

Для группы связанных изменений используйте транзакции. transaction_id передаётся в последующие вызовы /query.

МетодПутьНазначение
POST/api/v1/db/transaction/beginСоздать транзакцию, получить transaction_id
POST/api/v1/db/transaction/<transaction_id>/commitПодтвердить
POST/api/v1/db/transaction/<transaction_id>/rollbackОткатить
GET/api/v1/db/transaction/listСписок активных транзакций ключа

3.3. Источники данных

GET /api/v1/db/datasources

Список подключённых источников (id, type, host, port, database). Пароли и секреты не возвращаются.

4. API файлов (/api/v1/files/*)

Загрузка и получение файлов через платформу. Авторизация: API-ключ с правами files:* или JWT access token.

4.1. Загрузка

POST /api/v1/files/upload

Multipart form: поле file или files (множественная загрузка). Дополнительные поля формы:

  • category — категория файла
  • is_publictrue / false
  • metadata — JSON-строка с метаданными
curl -X POST http://localhost:5000/api/v1/files/upload \
  -H "X-API-Key: your-api-key" \
  -F "file=@document.pdf" \
  -F "category=documents" \
  -F "is_public=false"

4.2. Метаданные файла

GET /api/v1/files/<file_id>

Информация о файле: имя, размер, MIME, хеши, счётчик скачиваний. Для приватных файлов — только владелец (JWT) или ключ с files:download.

4.3. Скачивание

GET /api/v1/files/<file_id>/download

Возвращает бинарное содержимое файла. Правила доступа совпадают с метаданными.

5. Модульная маршрутизация (/api/module/*)

Единая точка входа для запросов к подключённым бэкенд-сервисам. Ядро резолвит модуль через правила маршрутизации и проксирует HTTP-запрос к целевому сервису.

Формат URL

/api/module/<module>/<method>

# пример
GET /api/module/back/products
POST /api/module/back/orders/create

Параметры query, заголовки и тело запроса передаются к бэкенду. Авторизация на уровне ядра не требуется — сервис может реализовать собственную проверку токенов или ключей.

Пример

curl -X GET "http://localhost:5000/api/module/back/products?limit=10" \
  -H "Content-Type: application/json"

Конкретные методы и контракты зависят от развёрнутых модулей и сервисов. Схема маршрутов настраивается администратором платформы.

6. Служебные endpoints

Не требуют аутентификации. Используются для health-check и мониторинга доступности.

МетодПутьНазначение
GET/api/healthБазовая проверка работоспособности
GET/api/statusРасширенный статус платформы
GET/api/openapi.jsonOpenAPI спецификация публичного API
GET/api/docs/publicSwagger UI

7. Коды ответов и ошибки

HTTPКогда используется
200Успешный запрос
400Ошибка валидации или параметров
401Нет или неверный API-ключ / JWT
403Недостаточно прав (permission) или отключённый режим (beta)
404Ресурс не найден
429Превышен лимит запросов (rate limiting)
500Внутренняя ошибка
503Сервис или конфигурация недоступны
{
  "success": false,
  "error": "Текст ошибки",
  "details": { ... }
}

По умолчанию действует rate limiting: около 60 запросов в минуту и 1000 в час на ключ. При превышении в ответе может присутствовать поле retry_after.

8. Версия и ограничения

ПараметрЗначение
Версия ядра1.0.6
Префикс API/api/v1
Доступ к БДAPI-ключ, параметризованный контракт
Доступ к файламAPI-ключ или JWT
Маршрутизация/api/module/* без сессии админки
WebSocket/ws (при включении в конфиге)

Бета-режим. Если платформа запущена с app.beta: true, часть операций (например, изменение данных в системных БД) может быть ограничена. В ответе — сообщение о недоступности функции в текущем тарифе.

Установка и первичная настройка — в инструкции по установке. Для интеграции под ваш сценарий — форма связи.

Инструкция по установке Отправить обратную связь