Лонгрид 3 из 5FAQ
Подписки и восстановление
Содержание
Частые вопросы
Когда достаточно REST, а когда нужна подписка?
Разовый снимок состояния — REST. Всё, что меняется постоянно, — подписка. Опрос котировки в цикле расходует лимит и всё равно пропускает изменения между запросами: между двумя ответами цена успевает сходить вверх и вернуться.
Поток молчит. Он сломался или рынок стоит?
По тишине это не различить, и в этом всё дело. Клиент, который не разбирает конверты
ERRORиEVENT, не отличает спокойный рынок от сломанной подписки. Проверьте по порядку: пришёл лиHANDSHAKE_SUCCESS, ушла ли подписка после него, нет ли конвертаERROR, нет ли ошибки внутриpayload, верен лиsubscription_type, полный ли символ в форматеticker@mic, идут ли сейчас торги.Соединение оборвалось. Что делать?
Восстанавливать не только сокет, но и состояние: получить свежий access_key, дождаться рукопожатия, вернуть подписки, забрать снимок через REST и сверить его с локальными данными. Порядок с деталями — в разделе ниже.
Почему после переподключения обязательно сверяться?
Повторная подписка возвращает новые события, но ничего не говорит о том, что произошло за время обрыва. Пропущенного события вы не увидите — его просто не будет.
Почему поле цены в REST и WebSocket выглядит по-разному?
Это разные представления одного и того же: REST возвращает объект
{"value": "313.58"}, поток — строку"313.58", gRPC — типgoogle.type.Decimal. Модель ответа из одного протокола нельзя без проверки переносить в другой.
Порядок восстановления
Получите свежий access_key.
Подключитесь и дождитесь HANDSHAKE_SUCCESS.
Восстановите подписки.
Запросите снимок состояния через REST.
Сверьте снимок с локальными заявками и позициями.
Конец лонгрида