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 не фиксируются в списке изменений. Если вы сохранили схему локально, время от времени сверяйтесь с источником на предмет изменений.
- Кешируйте результат. Если вы получаете редко изменяющиеся данные (например, календарь дивидендов), сохраняйте их локально на стороне вашего приложения.
Комбинируйте все доступные интерфейсы системы для максимально эффективного решения стоящих перед вами задач.