Справочник по базовым API бета-версии КАСКАД 360. Авторизация, работа с БД, маршрутизация.
Бета-версия API. Все эндпоинты стабильны, но могут быть расширены в последующих версиях. Обратная совместимость гарантируется в рамках мажорной версии.
API КАСКАД 360 — это RESTful API, доступный по базовому URL сервера. Все запросы и ответы используют формат JSON.
| Тип установки | URL |
|---|---|
| Локальная (Python) | http://localhost:5000 |
| Docker Compose | http://localhost:3535 |
Content-Type: application/json
Authorization: Bearer <JWT_TOKEN>
{
"success": true,
"data": { ... },
"message": "OK"
}
// При ошибке:
{
"success": false,
"error": "описание ошибки",
"code": "ERROR_CODE"
}
Бета-версия поддерживает два метода авторизации: JWT-токены и API-ключи.
Авторизация по логину и паролю. Возвращает JWT-токен.
{
"username": "admin",
"password": "admin"
}
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"expires_in": 3600,
"user": {
"id": 1,
"username": "admin",
"role": "admin"
}
}
}
API-ключи создаются в админ-панели. Передаются в заголовке:
X-API-Key: your-api-key-here
| Роль | Описание | Доступ |
|---|---|---|
admin | Администратор | Полный доступ |
manager | Менеджер | Управление сервисами, просмотр метрик |
developer | Разработчик | API к БД, конфигурация маршрутов |
viewer | Наблюдатель | Только чтение |
Без SQL. Все запросы к БД выполняются через параметризованный API. Ядро само формирует SQL через ORM/QueryBuilder. Передача сырого SQL запрещена.
Чтение данных из таблицы/сущности.
{
"entity": "products",
"fields": ["id", "name", "price", "category"],
"filters": {
"category": "electronics",
"price": {"$gte": 1000}
},
"order": [{"field": "price", "dir": "desc"}],
"limit": 20,
"offset": 0,
"datasource_id": "main"
}
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
entity | string | да | Имя таблицы/сущности (из whitelist) |
fields | array | нет | Список полей для выборки. По умолчанию — все |
filters | object | нет | Условия фильтрации (key-value или операторы) |
order | array | нет | Сортировка: [{"field": "...", "dir": "asc|desc"}] |
limit | integer | нет | Макс. количество записей (по умолчанию 100) |
offset | integer | нет | Смещение для пагинации |
datasource_id | string | нет | Идентификатор подключения к БД |
| Оператор | Описание | Пример |
|---|---|---|
$eq | Равно (по умолчанию) | {"status": "active"} |
$ne | Не равно | {"status": {"$ne": "deleted"}} |
$gt, $gte | Больше / Больше или равно | {"price": {"$gte": 100}} |
$lt, $lte | Меньше / Меньше или равно | {"age": {"$lt": 30}} |
$in | Входит в список | {"id": {"$in": [1, 2, 3]}} |
$like | Поиск по шаблону | {"name": {"$like": "%каскад%"}} |
{
"success": true,
"data": {
"items": [
{"id": 5, "name": "Ноутбук", "price": 89000, "category": "electronics"},
{"id": 12, "name": "Монитор", "price": 35000, "category": "electronics"}
],
"total": 42,
"limit": 20,
"offset": 0
}
}
{
"entity": "products",
"action": "create",
"data": {
"name": "Новый товар",
"price": 15000,
"category": "electronics",
"description": "Описание товара"
}
}
{
"success": true,
"data": {
"id": 55,
"affected_rows": 1
}
}
{
"entity": "products",
"action": "update",
"data": {
"price": 12000,
"description": "Обновлённое описание"
},
"filters": {
"id": 55
}
}
{
"entity": "products",
"action": "delete",
"filters": {
"id": 55
}
}
Осторожно: удаление без filters запрещено. Ядро возвращает ошибку FILTERS_REQUIRED.
Для выполнения нескольких операций атомарно используйте транзакции.
// Ответ
{
"success": true,
"data": {
"transaction_id": "txn_abc123def456"
}
}
// Добавьте transaction_id к любому запросу
{
"entity": "orders",
"action": "create",
"data": { "user_id": 1, "total": 5000 },
"transaction_id": "txn_abc123def456"
}
{
"transaction_id": "txn_abc123def456"
}
{
"transaction_id": "txn_abc123def456"
}
Шлюз автоматически проксирует запросы к зарегистрированным сервисам на основе маршрутов.
Возвращает список зарегистрированных сервисов.
{
"success": true,
"data": [
{
"name": "backend-api",
"host": "localhost",
"port": 8080,
"status": "healthy",
"routes": ["/api/v1/users/*", "/api/v1/orders/*"]
}
]
}
Проверка здоровья конкретного сервиса.
{
"success": true,
"data": {
"name": "backend-api",
"status": "healthy",
"latency_ms": 12,
"last_check": "2026-06-01T10:30:00Z"
}
}
Все запросы, совпадающие с маршрутами сервиса, автоматически проксируются:
# Этот запрос будет проксирован на backend-api (localhost:8080)
curl http://localhost:5000/api/v1/users/42 \
-H "Authorization: Bearer YOUR_TOKEN"
# Шлюз перенаправит на http://localhost:8080/api/v1/users/42
Для программного управления шлюзом (требуется роль admin или manager).
Общий статус шлюза.
{
"success": true,
"data": {
"version": "1.0.0-beta",
"uptime_seconds": 86400,
"services_count": 3,
"active_connections": 12,
"plugins": ["auth", "security", "validation"]
}
}
Список всех маршрутов.
Список подключений к базам данных.
Список загруженных плагинов.
| HTTP | Код | Описание |
|---|---|---|
| 400 | INVALID_REQUEST | Некорректные параметры запроса |
| 400 | ENTITY_NOT_ALLOWED | Сущность не в whitelist |
| 400 | FILTERS_REQUIRED | Фильтры обязательны для update/delete |
| 401 | UNAUTHORIZED | Требуется авторизация |
| 401 | TOKEN_EXPIRED | JWT-токен истёк |
| 403 | FORBIDDEN | Недостаточно прав (RBAC) |
| 404 | NOT_FOUND | Ресурс не найден |
| 429 | RATE_LIMITED | Превышен лимит запросов |
| 500 | INTERNAL_ERROR | Внутренняя ошибка сервера |
| 502 | SERVICE_UNAVAILABLE | Целевой сервис недоступен |
| Параметр | Старт (бета) | Про | Бизнес |
|---|---|---|---|
| Сервисы | до 2 | до 10 | до 50 |
| Подключения к БД | 1 | до 5 | Без ограничений |
| Драйверы БД | MySQL или PostgreSQL | MySQL + PostgreSQL | MySQL + PostgreSQL |
| Service Discovery | Static | Static + Docker | Docker, K8s, Consul, etcd |
| Балансировка | Нет | 3 алгоритма | 5 алгоритмов + автомасштабирование |
| Мониторинг | Базовый (логи) | Prometheus | Prometheus, Grafana, ELK, OpenTelemetry |
| Безопасность | JWT, API Keys, RBAC | + кэш, трансформация | + MFA, WAF, DDoS |
| Плагины | 3 (auth, security, validation) | 5+ (+ кэш, трансформация) | Все |
| Админ-панель | Базовая | Расширенная | Динамическая (от модулей) |
| Файловое хранилище | Нет | Нет | Да |
| SLA / Поддержка | Документация | 99.5%, телефон |
Бета-версия предназначена для тестирования и раннего внедрения. По вопросам расширения функционала — свяжитесь с нами.