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

GraphQL API

Торговая система АЛОР Брокер предоставляет доступ к агрегированным справочным данным через интерфейс GraphQL API.

Данный способ взаимодействия позволяет гибко управлять структурой ответа, запрашивая только необходимые для решения задачи атрибуты объектов.


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

GraphQL базируется на использовании строго типизированной схемы и единой конечной точки (endpoint) для всех типов запросов. Это позволяет агрегировать информацию из различных источников в рамках одного обращения.

Такая модель взаимодействия имеет свои преимущества и недостатки при практическом использовании интерфейса.

ПреимуществоНедостаток
Возможность самостоятельно определять состав полей в ответе снижает избыточность передаваемого трафикаТребуется предварительное изучение схемы GraphQL для корректного формирования запросов
Получение связанных данных из разных сущностей за один запрос исключает проблему множественных запросов (n+1)Повышенная сложность формирования запросов в сравнении с фиксированными структурами HTTP API
Единая точка взаимодействия (/hyperion) упрощает настройку сетевых соединений и интеграциюОтсутствие нативного кеширования ответов на уровне протокола HTTP из-за использования метода POST
Строгая типизация параметров и прозрачность схемы позволяют автоматически валидировать запросы на стороне клиентаОбработка сложных вложенных запросов может создавать повышенную нагрузку на вычислительные мощности сервера
примечание

На текущий момент для GraphQL API не установлены специфические количественные ограничения подсистемами защиты, однако при работе с интерфейсом следует руководствоваться принципами здравого смысла и добросовестного использования.


Сценарии использования

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

ДопустимоНедопустимо
Получение агрегированной информации по инструменту: описание компании, дивиденды и купоны в одном запросеПопытки использования GraphQL для высокочастотного мониторинга быстроизменяющихся котировок
Формирование индивидуальных выборок данных для отображения во фронтенд-приложениях и личных кабинетахВыгрузка полных исторических архивов рыночных данных за несколько лет
Поиск и фильтрация инструментов по сложным критериям, недоступным в стандартных методах HTTP APIОтправка однотипных простых запросов, имеющих прямые аналоги в HTTP API, без цели агрегации данных
Работа с данными, поступающими из нескольких внутренних подсистем в режиме реального времениМассовое дублирование запросов к неизменяемым справочникам в рамках одной торговой сессии
подсказка

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


Рекомендации

Для обеспечения стабильности взаимодействия и оптимизации производительности придерживайтесь следующих правил:

  • Минимизируйте выборку. Запрашивайте только те поля, которые непосредственно используются в вашем алгоритме или интерфейсе.
  • Используйте переменные. Передавайте динамические параметры запроса (например, тикеры или идентификаторы) через variables, а не вставляйте их непосредственно в строку запроса.
  • Изучайте схему. Схема GraphQL всегда доступна для ознакомления по адресам https://api.alor.ru/hyperion (Боевой контур) и https://apidev.alor.ru/hyperion (Тестовый контур). Используйте поддерживающие GraphQL API-клиенты (Playground по ссылке или Postman) для предварительного тестирования запросов.
  • Актуализируйте знание. В отличии от HTTP API и WebSocket API, обновления схемы GraphQL не фиксируются в списке изменений. Если вы сохранили схему локально, время от времени сверяйтесь с источником на предмет изменений.
  • Кешируйте результат. Если вы получаете редко изменяющиеся данные (например, календарь дивидендов), сохраняйте их локально на стороне вашего приложения.
подсказка

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