Лонгрид 12 из 13Курс
Перейти на gRPC и официальные SDK
Содержание
REST и WebSocket полезно пройти вручную: после этого понятны запросы, токены и события. В прикладном клиенте gRPC уменьшает объём собственного транспорта и даёт типизированные сообщения из proto-файлов.
Официальный репозиторий содержит:
пакет
@finam/grpc-tradeapiдля JavaScript;пакет
finam-sdkдля Python;Go-модуль с генерированными gRPC-клиентами;
Kotlin SDK и примеры;
proto-файлы, AsyncAPI-схему, руководство по миграции и примеры стратегий.
Возможности клиентов отличаются
Язык | Что предоставляется |
|---|---|
JavaScript | Сгенерированные типы и сервисы для ConnectRPC; access_key и его обновление контролирует приложение |
Python | FinamClient и AsyncFinamClient, автоматическое получение и фоновое обновление access_key, типизированные ошибки |
Go | Сгенерированные protobuf- и gRPC-клиенты; соединение, metadata, обновление access_key и retry-политика остаются в приложении |
Установите официальный клиент
Получите счёт через gRPC
Во всех трёх примерах используется уже известный FINAM_ACCOUNT_ID.
Поток котировок через gRPC
Названия методов одинаковы по смыслу во всех языках: SubscribeQuote, SubscribeBars, SubscribeOrderBook и SubscribeLatestTrades.
В Go-фрагменте потребуется импорт пакета:
Обновление access_key
gRPC предоставляет поток SubscribeJwtRenewal.
Python SDK использует его автоматически в фоне.
В JavaScript и Go приложение должно слушать поток самостоятельно и атомарно заменять access_key, который прикладывается к новым вызовам.
Обрыв потока обновления токена тоже требует переподключения с backoff.
Не запускайте таймер «получать новый access_key каждые N минут», если клиент может ориентироваться на expires_at или использовать поток обновления.
Снимок и поток в gRPC
В сообщениях рыночных данных доступен признак is_data_snapshot. Он помогает отличать первоначальный снимок от последующих изменений. Не трактуйте снимок как новую рыночную сделку или новый сигнал стратегии.
Обновление SDK
Закрепляйте рабочую версию зависимости и просматривайте changelog перед обновлением. Новые поля могут быть совместимыми на уровне protobuf, но менять бизнес-логику — например, появление размера торгового лота или флага снимка данных.
Конец лонгрида