--- title: Объявить WebSocket API description: Опишите send, call и subscribe, затем выберите протокол соединения. sources: - eazy_sdk.websocket - eazy_sdk_asyncapi.generate_package api_fingerprint: "sha256:b86c9acb698a55e0d00c0817c074e3816cf507394ec5b19ef845fc86fb3c2638" --- Три формы, три результата. WebSocket runtime отделён от HTTP-клиента, но использует тот же подход к операциям, моделям, middleware и crypto. ```bash uv add "eazy-sdk-core[websocket]" ``` ```{literalinclude} ../../../../../examples/docs/websocket.py :language: python :start-after: "# region docs: websocket" :end-before: "# endregion docs: websocket" ``` `WsSend` отправляет сообщение без ответа. `WsCall[T]` ждёт один типизированный ответ, а `WsSubscribe[T]` возвращает поток событий. Все поля класса входят в payload. :::{dropdown} Файл целиком ```{literalinclude} ../../../../../examples/docs/websocket.py :language: python ``` ::: ```text send: notify call: lookup subscribe: prices ``` ## Выбрать протокол и жизненный цикл `JsonEventProtocol` подходит для событий с discriminator. `GraphqlTransportWsProtocol` реализует `graphql-transport-ws`, включая `connection_init`, `connection_ack`, `next`, `error` и `complete`. | Credential | Когда читается | |---|---| | `StaticUpgradeAuth` | При создании Zapros-клиента для HTTP upgrade | | `ProtocolAuth` | Для каждого нового поколения соединения | | `DynamicPerMessageAuth` | Перед каждым прикладным сообщением | Повтор `send` или `call` требует явной политики, потому что доставка после разрыва может быть неизвестна. Для subscription отдельно задаётся resubscribe, способ восстановления позиции, ограниченная очередь и policy overflow, чтобы медленный потребитель не накапливал события без границы. ## Сгенерировать из AsyncAPI ```bash uv add "eazy-sdk-core[asyncapi,yaml]" eazy-sdk-asyncapi asyncapi.yaml generated --package-name market_stream ``` Генератор читает AsyncAPI 3.0 для `ws` и `wss`, создаёт модели, протокол и тонкий `AsyncWsApi`. Приложение по-прежнему владеет клиентом, reconnect policy и профилями шифрования. ## Дальше - {doc}`Описать общий конверт ` - {doc}`Зашифровать payload ` - {doc}`Справочник WebSocket `