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
Применяется к: двунаправленной команде с асинхронным результатом
Сообщение должно иметь идентификатор операции, позволяющий сопоставить ответ, ошибку и повтор. Повтор команды с необратимым эффектом должен соблюдать объявленный контракт идемпотентности.
Обоснование¶
Порядок сообщений не является надёжным способом сопоставления параллельных операций.
Проверка¶
- тест перестановки ответов;
- тест дубликата команды;
- тест неизвестного идентификатора.
Исключения¶
Однонаправленное событие не требует идентификатора ответа, но сохраняет идентификатор события по своему контракту.