Массивы данных
Приведённые на странице описания синтаксиса примеры описывают получение данных по одному определённому инструменту. Такой способ может оказаться неудобным, когда речь заходит о получении однотипных данных для большого количества инструментов разом. Для этих целей в GraphQL API созданы интерфейсы для получения массивов данных.
Доступные интерфейсы
Для получения массивов данных по множеству инструментов разом используются отдельные интерфейсы: instruments
, bonds
, derivatives
и stocks
.
Пример схемы
type Query {
instruments(
includeOld: Boolean! = false
includeNonBaseBoards: Boolean! = false
first: Int
after: String
last: Int
before: String
where: InstrumentModelFilterInput
order: [InstrumentModelSortInput!]
): InstrumentsConnection
bonds(
includeOld: Boolean! = false
includeNonBaseBoards: Boolean! = false
first: Int
after: String
last: Int
before: String
where: BondFilterInput
order: [BondSortInput!]
): BondsConnection
derivatives(
includeOld: Boolean! = false
includeNonBaseBoards: Boolean! = false
first: Int
after: String
last: Int
before: String
where: DerivativeFilterInput
order: [DerivativeSortInput!]
): DerivativesConnection
stocks(
includeOld: Boolean! = false
includeNonBaseBoards: Boolean! = false
first: Int
after: String
last: Int
before: String
where: StockFilterInput
order: [StockSortInput!]
): StocksConnection
}
Аргументы интерфейсов используются для пагинации, сортировки и фильтрации получаемых данных. Подробнее о них — в соответствующих статьях.
Отправка запросов
Обращение к полям instruments
, bonds
, derivatives
, и stocks
перенаправляется к тем же интерфейсам, что используются при получении данных по отдельному инструменту (Instrument
, Bond
, Derivative
и Stock
), объединённым в узлы (nodes
). Таким образом, тело операции аналогично примерам выше, лишь удлиняется на одно поле пути:
{
instruments {
nodes {
basicInformation {
symbol
exchange
description
shortName
type
market
}
}
}
}
В ответ система вернёт список из первых 10 инструментов с фактическими значениями указанных в операции полей данных.
Увеличение выборки
Для получения иного количества объектов используется один из двух аргументов корневого поля пути:
first
— возвращает первыеN
объектов от начала общего спискаlast
— возвращает первыеN
объектов с конца общего списка
Оба аргумента ожидают значения в формате Int
и являются взаимоисключаемыми, в связи с чем в одной операции может быть одновременно указан только один из них.
{
instruments(first: 50) {
nodes {
basicInformation {
symbol
exchange
description
shortName
type
market
}
}
}
}
В ответ система вернёт первые 50 записей от начала общего списка вместо 10 стандартных.
Узлы и грани
В приведённых выше примерах все поля объединяются в узлы (nodes
), с которыми и происходит взаимодействие. Обращение к узлу позволяет выгружать данные массивами, не прибегая к указанию каждого интересующего инструмента отдельно. Тем не менее, узлы не являются высшим уровнем объединения полей, так как сами входят в состав граней (edges
), включающих в себя поля и аргументы для последующей фильтрации, сортировки и постраничного вывода полученных данных.
Правильное построение запроса с заделом на последующие операции с возвращаемыми данными заключается в добавлении к уже известной структуре поля пути edges
между корневым полем пути и входящими в него узлами:
{
instruments {
edges {
node {
basicInformation {
symbol
exchange
description
shortName
type
market
}
}
}
}
}
Ответ от системы на запрос в текущем виде ничем не отличается от примера выше, однако такая структура открывает возможности для дальнейшей трансформации получаемых ответов.
Что дальше?
- Ознакомьтесь детальнее со спецификацией GraphQL, официальной документацией разработчиков и ответами на часто задаваемые вопросое
- Изучите базовый синтаксис GraphQL
- Узнайте о других дополнительных возможностях GraphQL API, доступных при взаимодействии с АЛОР Брокер API: получение массивов данных, фильтрация и сортировка данных
- Опробуйте полученные знания в веб-песочнице боевого или тестового контура