Сравнение интерфейсов
Торговая система АЛОР Брокер предоставляет несколько интерфейсов взаимодействия: HTTP API, WebSocket API и GraphQL API. Каждый из них реализует различную модель работы с данными и предназначен для решения определённого класса задач.
Данный раздел описывает критерии выбора и типовые сценарии использования каждого из интерфейсов.
Особенности интерфейсов
Каждый из интерфейсов обладает своими преимуществами и недостатками, которые влияют на эффективность решения поставленных задач. Для успешного определения наиболее подходящего варианта основные свойства каждого из интерфейсов были собраны в таблицу ниже.
| Критерий | HTTP API | WebSocket API | GraphQL API |
|---|---|---|---|
| Модель доставки данных | Pull (запрос–ответ) | Push (поток сообщений) | Pull (запрос–ответ) |
| Режим обновления данных | По запросу | В реальном времени | По запросу |
| Требования к задержке | Не критичны | Критичны | Не критичны |
| Тип нагрузки | Пакетная (batch) | Потоковая (stream) | Смешанная |
| Соединение | Краткоживущее | Постоянное | Краткоживущее |
| Состояние соединения | Stateless | Stateful | Stateless |
| Частота взаимодействия | Низкая / средняя | Высокая | Низкая / Средняя |
| Объём данных за запрос | Большой | Инкрементальный | Управляемый |
| Структура ответа | Фиксированная | Зависит от подписки | Определяется запросом |
| Управление составом данных | Нет | Нет | Да |
| Агрегация данных | Нет | Нет | Да |
| Подписка на события | Нет | Да | Нет |
| Количество запросов | Может быть большим | Сокращается за счёт подписок | Сокращается за счёт агрегации |
| Требования к клиенту | Минимальные | Повышенные (обработка потока) | Средние |
| Типичные сценарии | История, справочники, операции | Рыночные данные, события | Агрегированные выборки |
Алгоритм выбора
Упрощённо изобразить последовательность выбора интерфейса для решения поставленной задачи можно с помощью представленной ниже диаграммы.
Типовые сценарии
Приведённые ниже типовые сценарии использования API следует использовать как справочный материал при проектировании интеграции. Если задача не соответствует ни одному из сценариев, применяйте критерии выбора, описанные выше.
| Сценарий | Интерфейс | Причина |
|---|---|---|
| Получение текущих котировок | WebSocket | Данные изменяются непрерывно, требуется получение обновлений без задержки |
| Получение исторических свечей | HTTP | Требуется выгрузка данных за период одним запросом |
| Получение биржевого стакана | WebSocket | Стакан обновляется в реальном времени |
| Получение справочника инструментов | HTTP / GraphQL | Большой объём данных, редкие изменения |
| Получение расширенной информации по инструменту | GraphQL | Требуется агрегировать данные и выбрать конкретные поля |
| Выставление одной заявки | HTTP | Атомарная операция в модели «запрос–ответ» |
| Массовое интенсивное выставление заявок | WebSocket | Требуется высокая частота отправки распоряжений и асинхронное получение результатов их обработки без накладных расходов на установку соединений |
| Однократное получение статуса заявки | HTTP | Достаточно разового запроса |
| Отслеживание изменений статуса заявки | WebSocket | Требуется получать изменения статуса в реальном времени |
| Отслеживание сделок | WebSocket | Сделки поступают как поток событий |
| Получение состояния портфеля | HTTP | Требуется разовый снимок состояния |
| Отслеживание изменений портфеля | WebSocket | Изменения происходят асинхронно |
| Получение истории операций | HTTP | Требуется выборка за период |
| Получение агрегированной информации по портфелю | GraphQL | Требуется объединение нескольких сущностей |
Иногда одно и то же действие можно выполнить с помощью нескольких разных интерфейсов. В этом случае при выборе интерфейса стоит исходить из частоты и интенсивности выполнения этого действия.
Так, например, получить статус заявки можно как через HTTP API, так и через WebSocket API. Разница в том, что первый интерфейс вернёт статус на момент выполнения запроса, тогда как второй будет передавать все изменения в режиме реального времени.
Для максимально эффективного решения задач комбинируйте доступные интерфейсы. Например, запрашивая исторические данные через HTTP API и отслеживая биржевой стакан в режиме реального времени через WebSocket, вы получите полный обзор изменений цены инструмента перед его покупкой.
Использование интерфейса вне его целевого назначения может привести к блокировке доступа к системе.