Как это работает
Настройка проксирования
Пульт.Онлайн позволяет интегрировать сторонние веб-сервисы и API в интерфейс сервера в виде экранов на основе произвольного HTML, используя механизм проксирования запросов. Это обеспечивает:
Автоматическую передачу данных аутентификации (SCADA добавляет в запросы к сторонним сервисам информацию о текущем пользователе).
Безопасное взаимодействие (клиентский код не обращается к сторонним сервисам напрямую, избегая CORS и проблем с COOKIES).
Бесшовную интеграцию в едином интерфейсе
Клиентский браузер загружает экран на базе произвольного HTML с сервера Пульт.Онлайн. Возможен вариант загрузки с HTTP-сервера стороннего сервиса по проксированному URL.
Клиентский код (JavaScript в произвольном HTML-экране) отправляет запрос не напрямую к внешнему API, а через специальный прокси-эндпоинт сервера Пульт.Онлайн:
http(s)://<scada-server-host>/service/<имя-зарегистрированного-сервиса>
ws(s)://<scada-server-host>/service/<имя-зарегистрированного-сервиса>
Сервер Пульт.Онлайн перехватывает запрос, добавляет в заголовки информацию о пользователе, включая группы (заголовок x-pult-user
) и перенаправляет запрос к указанному стороннему сервису.
Сторонний сервис получает запрос с валидными данными пользователя Пульт.Онлайн и возвращает ответ серверу
Сервер Пульт.Онлайн возвращает ответ клиентскому браузеру
Сторонний сервис также может работать с API сервера Пульт.Онлайн для выполнения фоновых задач (например, для сбора статистических и исторических данных для систем верхнего уровня). Авторизация, при этом, выполняется по API-ключу.
Диаграмма работы:
┌─────────────────┐ ┌──────────────────────┐ ┌───────────────────────┐
│ │ │ │ │ │
│ Клиентский │ │ SCADA Web-сервер │ │ Стороннее веб- │
│ браузер │ │ (Прокси) │ │ приложение / API │
│ │ │ │ │ │
└────────┬────────┘ └──────────┬───────────┘ └────────────┬──────────┘
│ │ │
│ 1. Загрузка произвольного │ │
│ HTML-экрана с сервера │ │
│ (HTML+JS+CSS) │ │
├─────────────────────────────►| │
│◄─────────────────────────────│ │
│ │ │
│ 2. JS на экране │ │
│ отправляет запрос │ │
│ к `/service/myservice` │ │
├─────────────────────────────►| │
│ │ │
│ │ 3. SCADA добавляет заголовок │
│ │ с данными пользователя │
│ │ (x-pult-user) │
│ │ и проксирует запрос │
│ ├─────────────────────────────────►|
│ │ │
│ │ 4. Ответ от стороннего сервиса │
│ │◄─────────────────────────────────┤
│ │ │
│ 5. Ответ возвращается │ │
│ клиенту через SCADA │ │
│◄─────────────────────────────┤ │
│ │ │
│ │ │
│ (Аналогично для WebSocket) │ │
│ │ │
│ WS: `/service/myservice` │ │
├─────────────────────────────►| │
│ │ │
│ │ SCADA устанавливает │
│ │ WS-соединение с добавлением │
│ │ заголовка x-pult-user │
│ ├─────────────────────────────────►|
│ │ │
│ │ Двусторонний обмен данными │
│◄─────────────────────────────┼─────────────────────────────────►│
│ │ │
│ │ 6. (Опционально) Работа │
│ │ стороннего сервиса в фоне │
│ │ с API SCADA-сервера по API-Key │
│ │◄─────────────────────────────────│
│ │─────────────────────────────────►│
│ │◄─────────────────────────────────│
│ │─────────────────────────────────►│
│ │ │
Создайте json-файл настроек, например, по адресу /pult_server/services/server/proxy_services.json
. Настройте эндпоинты, например:
[
{
"name":"accounting",
"timeout":10000,
"ws_proxy_url":"ws://127.0.0.1:8300/api",
"http_proxy_url":"http://127.0.0.1:8300/ws",
"enabled":1
},
{
"name":"bms",
"timeout":10000,
"ws_proxy_url":"wss://bms.company.com/scada/integration",
"http_proxy_url":"https://bms.company.com/scada/integration",
"enabled":1
},
]
В настройках сервиса server
в параметре proxy_services_file
укажите путь к json-файлу, абсолютный или относительно папки /pult_server/services/server
. В нашем примере файл уже лежит в папке /pult_server/services/server
, поэтому указываем просто имя файла:
proxy_services_file=proxy_services.json
Сохраните настройки (сервис server
будет автоматически перезапущен и примет новые настройки).
Теперь все HTTP- и WS-запросы по URL /service/accounting
будут перенаправлены на localhost:8300
, а запросы по URL /service/bms
на сервер bms.company.com
.