Перейти к основному содержимому

Сравнение интерфейсов

Торговая система АЛОР Брокер предоставляет несколько интерфейсов взаимодействия: HTTP API, WebSocket API и GraphQL API. Каждый из них реализует различную модель работы с данными и предназначен для решения определённого класса задач.

Данный раздел описывает критерии выбора и типовые сценарии использования каждого из интерфейсов.


Особенности интерфейсов

Каждый из интерфейсов обладает своими преимуществами и недостатками, которые влияют на эффективность решения поставленных задач. Для успешного определения наиболее подходящего варианта основные свойства каждого из интерфейсов были собраны в таблицу ниже.

КритерийHTTP APIWebSocket APIGraphQL API
Модель доставки данныхPull (запрос–ответ)Push (поток сообщений)Pull (запрос–ответ)
Режим обновления данныхПо запросуВ реальном времениПо запросу
Требования к задержкеНе критичныКритичныНе критичны
Тип нагрузкиПакетная (batch)Потоковая (stream)Смешанная
СоединениеКраткоживущееПостоянноеКраткоживущее
Состояние соединенияStatelessStatefulStateless
Частота взаимодействияНизкая / средняяВысокаяНизкая / Средняя
Объём данных за запросБольшойИнкрементальныйУправляемый
Структура ответаФиксированнаяЗависит от подпискиОпределяется запросом
Управление составом данныхНетНетДа
Агрегация данныхНетНетДа
Подписка на событияНетДаНет
Количество запросовМожет быть большимСокращается за счёт подписокСокращается за счёт агрегации
Требования к клиентуМинимальныеПовышенные (обработка потока)Средние
Типичные сценарииИстория, справочники, операцииРыночные данные, событияАгрегированные выборки

Алгоритм выбора

Упрощённо изобразить последовательность выбора интерфейса для решения поставленной задачи можно с помощью представленной ниже диаграммы.


Типовые сценарии

Приведённые ниже типовые сценарии использования API следует использовать как справочный материал при проектировании интеграции. Если задача не соответствует ни одному из сценариев, применяйте критерии выбора, описанные выше.

СценарийИнтерфейсПричина
Получение текущих котировокWebSocketДанные изменяются непрерывно, требуется получение обновлений без задержки
Получение исторических свечейHTTPТребуется выгрузка данных за период одним запросом
Получение биржевого стаканаWebSocketСтакан обновляется в реальном времени
Получение справочника инструментовHTTP / GraphQLБольшой объём данных, редкие изменения
Получение расширенной информации по инструментуGraphQLТребуется агрегировать данные и выбрать конкретные поля
Выставление одной заявкиHTTPАтомарная операция в модели «запрос–ответ»
Массовое интенсивное выставление заявокWebSocketТребуется высокая частота отправки распоряжений и асинхронное получение результатов их обработки без накладных расходов на установку соединений
Однократное получение статуса заявкиHTTPДостаточно разового запроса
Отслеживание изменений статуса заявкиWebSocketТребуется получать изменения статуса в реальном времени
Отслеживание сделокWebSocketСделки поступают как поток событий
Получение состояния портфеляHTTPТребуется разовый снимок состояния
Отслеживание изменений портфеляWebSocketИзменения происходят асинхронно
Получение истории операцийHTTPТребуется выборка за период
Получение агрегированной информации по портфелюGraphQLТребуется объединение нескольких сущностей

Иногда одно и то же действие можно выполнить с помощью нескольких разных интерфейсов. В этом случае при выборе интерфейса стоит исходить из частоты и интенсивности выполнения этого действия.

Так, например, получить статус заявки можно как через HTTP API, так и через WebSocket API. Разница в том, что первый интерфейс вернёт статус на момент выполнения запроса, тогда как второй будет передавать все изменения в режиме реального времени.

подсказка

Для максимально эффективного решения задач комбинируйте доступные интерфейсы. Например, запрашивая исторические данные через HTTP API и отслеживая биржевой стакан в режиме реального времени через WebSocket, вы получите полный обзор изменений цены инструмента перед его покупкой.

предупреждение

Использование интерфейса вне его целевого назначения может привести к блокировке доступа к системе.