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

Массивы данных

Приведённые на странице описания синтаксиса примеры описывают получение данных по одному определённому инструменту. Такой способ может оказаться неудобным, когда речь заходит о получении однотипных данных для большого количества инструментов разом. Для этих целей в 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
}
}
}
}
}

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


Что дальше?