Перейти к содержанию

WebSocket-интеграции

Требования применяются к разработке и тестированию WebSocket client и server. Уровни обязательности определены в корневом README.md.

INT-WS-001. Версионируемый прикладной протокол

Уровень: MUST

Применяется к: сообщениям WebSocket-соединения

Subprotocol, типы сообщений, schema payload, направление, состояния сессии и правила совместимости должны быть зафиксированы как версионируемый контракт. Каждое сообщение должно иметь стабильный тип; отсутствие значения должно отличаться от пустого и фиктивного.

Обоснование

WebSocket определяет транспорт, но не семантику сообщений.

Проверка

  • schema validation входящих и исходящих сообщений;
  • contract-тест переходов состояния;
  • compatibility test версий клиента и сервера.

Исключения

Одно фиксированное бинарное сообщение всё равно должно иметь объявленную схему.

INT-WS-002. Аутентификация и смена прав

Уровень: MUST

Применяется к: защищённому WebSocket-соединению

Server должен аутентифицировать соединение до передачи защищённых данных и авторизовать подписку или команду по фактическому объекту. Credential не должен передаваться в URL. Контракт должен определять реакцию на истечение сессии и изменение прав без доверия к ранее принятому сообщению клиента.

Обоснование

Долгоживущее соединение переживает изменение состояния доступа.

Проверка

  • тест отсутствующего и истёкшего credential;
  • тест прямой подписки на запрещённый объект;
  • тест изменения прав в активном соединении.

Исключения

Публичный канал может не требовать аутентификации при явно публичной схеме данных.

INT-WS-003. Ограничение сообщений и очередей

Уровень: MUST

Применяется к: приёму и отправке сообщений

Client и server должны ограничивать размер сообщения, частоту входящих сообщений и локальную очередь отправки. При медленном peer контракт должен определять отклонение, объединение или прекращение доставки; неограниченное накопление запрещено.

Обоснование

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

Проверка

  • тест размера и частоты;
  • нагрузочный тест медленного peer;
  • проверка поведения при заполненной очереди.

Исключения

Не допускаются для конечности очереди.

INT-WS-004. Жизненный цикл и восстановление клиента

Уровень: MUST

Применяется к: разрыву и повторному установлению соединения

Контракт должен определять heartbeat, обнаружение разрыва, ограниченный reconnect с backoff и способ восстановления подписок. Если сообщения могут быть потеряны между соединениями, клиент должен получать явный gap либо возобновлять поток по стабильной позиции; молчаливое предположение непрерывности запрещено.

Обоснование

Повторное соединение не доказывает полноту полученного потока.

Проверка

  • тест half-open и потери сети;
  • тест reconnect storm;
  • тест gap или resume position.

Исключения

Потеря допустима для явно best-effort канала, если consumer не использует его как источник состояния.

INT-WS-005. Корреляция запроса и ответа

Уровень: MUST

Применяется к: двунаправленной команде с асинхронным результатом

Сообщение должно иметь идентификатор операции, позволяющий сопоставить ответ, ошибку и повтор. Повтор команды с необратимым эффектом должен соблюдать объявленный контракт идемпотентности.

Обоснование

Порядок сообщений не является надёжным способом сопоставления параллельных операций.

Проверка

  • тест перестановки ответов;
  • тест дубликата команды;
  • тест неизвестного идентификатора.

Исключения

Однонаправленное событие не требует идентификатора ответа, но сохраняет идентификатор события по своему контракту.