Skip to main content

Core

Core — центральный модуль для работы с API Т-Инвестиций.

Какие задачи решает

  • Предоставляет интерфейс для работы с API Т-Инвестиций.
  • Является обёрткой для работы с унарными запросами, server-side и bidirectional-стримами.
  • Логирует и трассирует запросы.
  • Обрабатывает ошибки и повторные попытки (retry).
  • Поддерживает конфигурации resilience4j для унарных запросов.
  • Объединяет стримы рыночных данных в один поток с помощью MarketDataStreamManager.

Добавить модуль в проект


Задать конфигурацию клиента

Конфигурацию клиента можно задать в файле properties в classpath. Значения по умолчанию:

token=t.*****
connection.timeout=30000
connection.keepalive=60000
connection.max-message-size=16777216
connection.retry.max-attempts=3
connection.retry.wait-duration=2000
grpc.debug=false
grpc.context-fork=true
target=invest-public-api.tinkoff.ru:443
sandbox.target=sandbox-invest-public-api.tinkoff.ru:443
sandbox.enabled=false
stream.market-data.max-streams-count=16
stream.market-data.max-subscriptions-count=300
stream.inactivity-timeout=10000
stream.ping-delay=5000

Подробнее о каждом параметре:

  • tokenтокен доступа к API Т-Инвестиций.
  • connection.timeout — таймаут соединения в миллисекундах.
  • connection.keepalive — интервал проверки соединения в миллисекундах.
  • connection.max-message-size — максимальный размер сообщения в байтах.
  • connection.retry.max-attempts — максимальное количество попыток отправки запроса.
  • connection.retry.wait-duration — интервал ожидания между попытками отправки запроса в миллисекундах.
  • grpc.debug — включение отладочной информации.
  • grpc.context-fork — включение форка контекста.
  • target — URL API Т-Инвестиций.
  • sandbox.target — URL API песочницы Т-Инвестиций.
  • sandbox.enabled — включение песочницы.
  • stream.market-data.max-streams-count — максимальное количество стримов для рыночных данных. Используется в MarketDataStreamManager.
  • stream.market-data.max-subscriptions-count — максимальное количество подписок на рыночные данные в одном стриме. Используется в MarketDataStreamManager.
  • stream.inactivity-timeout — таймаут отсутствия сообщений в стриме в миллисекундах.
  • stream.ping-delay — интервал пинга в стриме в миллисекундах.

Чтобы видеть, какие ответы приходят от API и их tracking-id, в параметре grpc.debug укажите true.

За загрузку конфигурации подключения из файла или объекта Properties и ее хранение отвечает ConnectorConfiguration.

Ниже привели примеры кода на Java, в которых в качестве ресурса для ConnectorConfiguration указан файл invest.properties. Содержание файла соответствует представленному выше.

Унарные запросы

Есть два вида выполнения унарных запросов на клиенте — синхронный и асинхронный.

Синхронный

Синхронные запросы блокируют выполнение программы до получения ответа от сервера. Чтобы выполнить запрос, создайте экземпляр SyncStubWrapper.


Для поддержки механизма resilience можно использовать класс ResilienceSyncStubWrapper, который включает retry, bulkhead, rate-limiting и circuit-breaker. По сути, это обёртка над SyncStubWrapper.


Асинхронный

Асинхронные запросы возвращают CompletableFuture, которые могут быть обработаны позже. Не блокируют выполнение программы. Чтобы выполнить запрос, создайте экземпляр AsyncStubWrapper.


Для поддержки resilience можно использовать ResilienceAsyncStubWrapper. Как и в случае с синхронным вызовом, это обёртка над AsyncStubWrapper.


По умолчанию конфигурация настроена только для retry, но вы также можете настроить другие компоненты resilience.

Stream-соединения

SDK предоставляет удобные обёртки для работы со стримами. Они позволяют устанавливать листенеры для получения данных — например, OnNextListener, OnErrorListener или OnCompleteListener.

Server-side

Для создания server-side стрима используется класс ServerSideStreamWrapper.


Resilience server-side wrapper

Для упрощения работы с server-side стримами и повышения их надёжности был создан ResilienceServerSideStreamWrapper.

Он инициирует автоматическое переподключение стрима и повторную отправку последнего успешного запроса на подписку, если в стриме не было активности в течение времени, заданного в параметрах stream.inactivity-timeout.

Чтобы получить экземпляр ResilienceServerSideStreamWrapper, создайте один из вариантов конфигурации ResilienceServerSideStreamWrapperConfiguration:

  • OrderStateStreamWrapperConfiguration
  • TradeStreamWrapperConfiguration
  • PortfolioStreamWrapperConfiguration
  • PositionStreamWrapperConfiguration

Bidirectional

Для работы с bidirectional-стримами используется класс BidirectionalStreamWrapper.


Чтобы получать данные для bidirectional-стрима, нужно отправить запрос на подписку.

Также для более удобной работы с MarketDataStreamService при создании BidirectionalStreamWrapper можно передать конфигурацию MarketDataStreamConfiguration.


Учитывайте, что листенеры в MarketDataStreamConfiguration возвращают Wrapper-объекты над сгенерированными gRPC-объектами. Это нужно для удобной работы с ценами и временем, так как в gRPC используется свой Timestamp для времени и Quotation для чисел с плавающей запятой. Wrapper преобразует их в LocalDateTime и BigDecimal соответственно.

Подробнее про нестандартные типы данных

Resilience market data wrapper

Для повышения надежности при работе с MarketDataStream создан MarketDataStreamWrapper. Он инициирует автоматическое переподключение стрима и повторную отправку последовательности совершенных до обрыва соединения запросов, если в стриме не было активности в течение времени, заданного в параметрах stream.inactivity-timeout.


MarketDataStreamManager

Ещё одна удобная обёртка над bidirectional-стримами MarketDataStream — менеджер MarketDataStreamManager.

Он нужен, чтобы избавить пользователя от необходимости заботиться о количестве подписок и их распределении по стримам — они ограничиваются лимитами API.

Менеджер позволяет объединить подписки из всех стримов в один общий поток данных и обрабатывать их в листенерах.


При использовании MarketDataStreamManager не забывайте вызывать метод start() — это можно сделать как до подписки, так и после нее. Метод запускает обработку поступающих в листенеры данных.

openapi@tbank.ru

АО «ТБанк» использует файлы «cookie» с целью персонализации сервисов и повышения удобства пользования веб-сайтом. «Cookie» представляют собой небольшие файлы, содержащие информацию о предыдущих посещениях веб-сайта. Если вы не хотите использовать файлы «cookie», измените настройки браузера.