Архитектура API и соглашения маршрутизации
Подсистема API в RUSEON Core построена на базе веб-фреймворка Gin и сервера gRPC (internal/api/router.go).
1. Пространства маршрутов API
Эндпоинты сгруппированы по функциональным пространствам:
| Пространство путей | Авторизация | Назначение |
|---|---|---|
/api/* | JWT Bearer / Публичный (/api/login) | Управление камерами, пользователями, тегами, папками, бэкапом |
/stream/* | Публичный или токен стрима (60с) | Живая раздача (WHEP WebRTC, WebCodecs WebSocket, HLS) |
/hls/* | Публичный / Токен | Воспроизведение архива (archive.m3u8, segment.ts) |
/models/* | Публичный | Хаб загрузки и кеширования ONNX AI-моделей (GET /models/:filename) |
/livez, /readyz | Публичный | Kubernetes-пробы жизнеспособности и готовности |
/metrics | Публичный / Scraper | Экспортер метрик Prometheus |
2. Стандартные ответы JSON и ошибки
Ответы возвращаются в виде структурированных JSON-объектов.
Успешная авторизация (POST /api/login):
json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}Ошибка:
json
{
"error": "camera not found"
}HTTP-статусы:
200 OK: Запрос успешно выполнен.201 Created: Создана сущность или инициализирована сессия WHEP.400 Bad Request: Некорректный JSON или параметры запроса.401 Unauthorized: Отсутствует или истек токен JWT / токен стрима.403 Forbidden: Недостаточно прав роли RBAC.404 Not Found: Камера, пользователь или файл архива не найдены.500 Internal Server Error: Ошибка файловой системы или сервера.
3. Стриминг логов в реальном времени (SSE)
Подписка на логи ядра через Server-Sent Events (SSE):
http
GET /api/logs/stream
Authorization: Bearer <JWT_TOKEN>
Accept: text/event-stream