Транспортный API
Транспортный API — набор HTTP-эндпоинтов, через которые информационные системы отправляют и получают сообщения. Все запросы требуют авторизации — см. Авторизация.
Базовый префикс: /api/exchange
Отправка сообщения
POST /api/exchange/send/{messageClass}
Authorization: Bearer <accessToken>
Content-Type: application/json
<тело сообщения в формате JSON>
messageClass — класс сообщения, зарегистрированный в DataHUB. Тело запроса — JSON-конверт целиком.
Ответы:
| Код | Значение |
|---|---|
200 OK |
Сообщение принято и поставлено в очередь |
400 Bad Request |
Некорректный формат тела |
401 Unauthorized |
Токен истёк или недействителен |
404 Not Found |
Класс сообщения не найден |
Получение сообщения (short-polling)
Ответы:
| Код | Значение |
|---|---|
200 OK |
Сообщение получено; тело ответа — JSON-конверт |
204 No Content |
Нет сообщений в очереди |
401 Unauthorized |
Токен истёк |
Получение сообщения (long-polling)
Сервер удерживает соединение до появления сообщения или истечения таймаута.
Ответы:
| Код | Значение |
|---|---|
200 OK |
Сообщение получено |
204 No Content |
Таймаут истёк раньше HTTP-таймаута клиента (нет сообщений) |
408 Request Timeout |
HTTP-таймаут long-polling истёк (нет сообщений); нормальная ситуация, продолжить цикл |
401 Unauthorized |
Токен истёк |
408 при long-polling — штатный ответ, означающий, что за период ожидания сообщений не поступило. Адаптер должен обрабатывать его так же, как 204: продолжить цикл получения.
Подтверждение получения (ACK)
ackId — идентификатор сообщения из поля Id конверта, полученного через /receive.
ACK должен отправляться после фиксации сообщения в локальном хранилище, а не внутри той же транзакции. Это исключает потерю сообщения при сбое базы данных между ACK и коммитом.
Ответы:
| Код | Значение |
|---|---|
200 OK |
Подтверждение принято; сообщение удалено из очереди |
404 Not Found |
AckId не найден (сообщение уже подтверждено или истёк TTL) |
401 Unauthorized |
Токен истёк |
Служебные эндпоинты
Возвращает имя текущей системы в DataHUB. Используется для проверки авторизации.
Эхо-тест без авторизации. Возвращает переданную строку.
Порядок работы адаптера
Получение:
1. GET /receive или GET /receive-long-polling
2. При 200: сохранить локально (BEGIN TX → INSERT → COMMIT TX)
3. После COMMIT: POST /ack/{Id}
4. Повторить с шага 1
Отправка:
1. Сформировать JSON-конверт
2. POST /send/{messageClass}
3. При 200: записать статус «Отправлено»
4. При ошибке: повторить согласно политике retry