Перейти к содержимому

Шаблон WebSocket

Шаблон описания WebSocket-интеграции.

Шаблон WebSocket

WebSocket используется для двустороннего обмена сообщениями между клиентом и сервером в режиме открытого соединения.

Паспорт интеграции

ПолеЗначение
Endpointwss://<host>/<path>
Назначение<для чего используется>
Клиент<web / mobile / service>
Сервер<backend service>
Версияv1
СтатусDraft / Review / Approved

Назначение

Опишите realtime-сценарии, которые закрывает WebSocket.

URL подключения

wss://api.example.ru/ws/v1/notifications

Handshake

ПараметрГде передаетсяОбяз.Описание
AuthorizationHeader / QueryДаBearer <token>
X-Correlation-IdHeaderНетID подключения
clientVersionQueryНетВерсия клиента

Авторизация

  1. Клиент открывает соединение.
  2. Сервер проверяет token.
  3. Сервер проверяет права пользователя.
  4. При успехе соединение устанавливается.
  5. При ошибке сервер закрывает соединение с кодом <close code>.

Каналы / подписки

КаналКто подписываетсяНазначение
notificationsАвторизованный пользовательПользовательские уведомления
request-statusПользователь с правом <permission>Изменение статусов заявок

Сообщение от клиента

{
  "type": "subscribe",
  "requestId": "req-001",
  "payload": {
    "channel": "request-status",
    "filters": { "requestId": "12345" }
  }
}

Сообщение от сервера

{
  "type": "requestStatusChanged",
  "eventId": "evt-001",
  "occurredAt": "2026-05-09T12:00:00Z",
  "payload": {
    "requestId": "12345",
    "status": "APPROVED"
  }
}

Типы сообщений

TypeНаправлениеОписание
subscribeClient -> ServerПодписка на канал
unsubscribeClient -> ServerОтписка от канала
pingClient -> ServerПроверка соединения
pongServer -> ClientОтвет на ping
errorServer -> ClientОшибка обработки
<eventName>Server -> ClientБизнес-событие

Ошибки и close codes

Код / close codeУсловиеПоведение
UNAUTHORIZED / 4001Не авторизованЗакрыть соединение
FORBIDDEN / 4003Нет правЗакрыть или вернуть error
INVALID_MESSAGEНекорректный форматВернуть error
RATE_LIMIT_EXCEEDEDСлишком много сообщенийВернуть error / закрыть

Heartbeat и reconnect

ПараметрЗначение
Интервал ping<N> секунд
Timeout pong<N> секунд
Стратегия reconnectExponential backoff
После reconnectПовторить подписки
Восстановление пропущенных событий<REST endpoint / повторная синхронизация>

Гарантии доставки

ВопросОтвет
Гарантируется доставка?Да / Нет
Возможны дубли?Да / Нет
Есть eventId для дедупликации?Да / Нет
Есть история после reconnect?Да / Нет

Ограничения

ОграничениеЗначение
Максимальный размер сообщения<N> КБ
Максимум соединений на пользователя<N>
Rate limit сообщений от клиента<N> сообщений/сек

Sequence diagram

@startuml
actor "Client" as C
participant "WebSocket Gateway" as WS
participant "Backend Service" as BE
C -> WS: Connect + token
WS -> WS: Validate token
WS --> C: Connection established
C -> WS: subscribe(channel)
BE --> WS: Event
WS --> C: event message
@enduml

Открытые вопросы

IDВопросКому адресованСтатус
Q-001<вопрос><роль / ФИО>Открыт

Критерии приемки документа

IDКритерий
AC-DOC-001Документ согласован с владельцем продукта / архитектором / разработкой, если применимо.
AC-DOC-002Все спорные места вынесены в открытые вопросы или зафиксированы как ограничения.
AC-DOC-003В документе нет неоднозначных формулировок вроде “быстро”, “удобно”, “корректно” без измеримого критерия.