Фильтрация
Для фильтрации результатов запросы должны отправляться через поле пути edges
.
При работе с массивами данных может потребоваться уточнить запрос, оставив в ответе только те данные, которые соответствуют текущим интересам. Для этого можно воспользоваться инструментами фильтрации возвращаемых данных.
Аргумент фильтрации
Данные можно отфильтровать по характеристикам возвращаемых объектов. Для этих целей используется аргумент корневого поля пути where
.
В качестве фильтра используются группы входных данных XModelFilterInput
, где X
— имя интерфейса, данные которого используются для фильтрации:
InstrumentModelFilterInput
— фильтры интерфейсаInstrument
BondFilterInput
— фильтры интерфейсаBond
DerivativeFilterInput
— фильтры интерфейсаDerivative
StockFilterInput
— фильтры интерфейсаStock
Так, например, в качестве фильтров для интерфейса Instrument
можно использовать поля пути basicInformation
, currencyInformation
, tradingDetails
, financialAttributes
, boardInformation
и additionalInformation
, а также все входящие в них поля данных.
Входные значения
В качестве значения фильтр может ожидать как случайное значение, соответствующее формату входных данных, так и одно из предзаданных значений из схемы. Так, согласно схеме, для фильтрации по полю symbol
ожидается тикер в строковом формате (например, "SBER"
), тогда как для поля market
потребуется привести одно из значений списка enum Market
.
Пример схемы
"""
Список возможных фильтров для поля BasicInformation
"""
input BasicInformationFilterInput {
and: [BasicInformationFilterInput!]
or: [BasicInformationFilterInput!]
symbol: StringOperationFilterInput
exchange: ExchangeOperationFilterInput
description: StringOperationFilterInput
shortName: StringOperationFilterInput
Тип финансового инструмента
type: StringOperationFilterInput
market: MarketOperationFilterInput
}
"""
Список возможных ключей для поля market
"""
input MarketOperationFilterInput {
eq: Market
neq: Market
in: [Market!]
nin: [Market!]
}
"""
Список возможных значений для поля market
"""
enum Market {
FOND
CURR
FORTS
SPBX
UNITED
BE
INFO
ITS
}
Ключи фильтрации
Каждый фильтр сопровождается ключом, определяющим совпадение фактического значения поля с заданным. Полный перечень ключей зависит от схемы выбранного поля. Ключи могут быть следующими:
eq
/neq
— фактическое значение (не) равно указанномуcontains
/ncontains
— фактическое значение (не) содержит указанноеin
/nin
— фактическое значение (не) входит в список значенийstartsWith
/nstartsWith
— фактическое значение (не) начинается с указанногоendsWith
/nendsWith
— фактическое значение (не) заканчивается указанным
{
instruments(where: { basicInformation: { symbol: { contains: "SBER" } } }) {
edges {
node {
basicInformation {
symbol
...
}
}
}
}
}
{
"data": {
"instruments": {
"edges": [
{
"node": {
"basicInformation": {
"symbol": "SBER",
...
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP",
...
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP300424CE310",
...
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP080524CE320",
...
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP150524PE310",
...
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP080524CE310",
...
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP300424PE290",
...
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP300424CE320",
...
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP150524CE320",
...
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP080524PE310",
...
}
}
}
]
}
}
}
Группировка фильтров
Фильтры можно группировать с помощью логических операторов для получения более точных данных. Доступны два оператора:
and
— выполняться должны все заданные фильтрыor
— выполняться должен хотя бы один из заданных фильтров
{
instruments(where: { and: [ { basicInformation: { symbol: { contains: "SBER" } market: { eq: FOND } } } ] }) {
edges {
node {
basicInformation {
symbol
...
market
}
}
}
}
}
{
"data": {
"instruments": {
"edges": [
{
"node": {
"basicInformation": {
"symbol": "SBER",
...
"market": "FOND"
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBERP",
...
"market": "FOND"
}
}
},
{
"node": {
"basicInformation": {
"symbol": "SBER-ME",
...
"market": "FOND"
}
}
}
]
}
}
}
Группируемые фильтры должны соответствовать схеме как в написании, так и структурно. При этом дополнительный фильтр можно добавить как отдельным объектом, так и как часть уже существующего (только если используются разные поля данных). Например, оба следующих варианта записи фильтров будут верны:
{
instruments(where: { and: [ { basicInformation: { symbol: { contains: "SBER" } market: { eq: FOND } } } ] }) {
edges {
node {
basicInformation {
...
}
}
}
}
}
{
instruments(where: { and: [ { basicInformation: { symbol: { contains: "SBER" } } } { basicInformation: {market: { eq: FOND }}} ] }) {
edges {
node {
basicInformation {
...
}
}
}
}
}
Логические операторы можно комбинировать для увеличения вариативности выборки:
{
instruments(where: {
and: [ { basicInformation: { symbol: { contains: "SBER" } } } { or: [ { basicInformation: { market: { eq: FOND } } } { basicInformation: { market: { eq: FORTS } } } ] } ] }) {
edges {
node {
basicInformation {
symbol
...
market
}
}
}
}
}
В ответ система вернёт все объекты, в которых будет найдено значение SBER
в поле symbol
и значение поля market
которых будет равно FOND
или FORTS
(пример такого ответа есть выше).
Логические операторы and
и or
можно использовать даже с одним фильтром. Это не окажет никакого эффекта на результаты выдачи, но и не вызовет ошибку в обработке запроса.
Фильтрация по спискам значений
Ключи фильтрации in
/nin
, в отличии от других ключей, ожидают получить не одиночное значение, а целый список, с которым будет проводиться сравнение. Доступность этого ключа для выбранного поля и допустимые значения и их формат определяются схемой.
Чтобы добавить список значений для сравнения с фактическими значениями полей, заключите все интересующие значения в квадратные скобки [ ]
:
{
instruments(where: { and: [ { basicInformation: { symbol: { contains: "SBER" } } } { basicInformation: { market: { in: [FOND FORTS] } } } ] }) {
edges {
node {
basicInformation {
...
}
}
}
}
}
В ответ система вернёт все объекты, в которых будет найдено значение SBER
в поле symbol
и значение поля market
будет совпадать с одним из указанных в списке значений — FOND
или FORTS
(пример такого ответа есть выше).
Что дальше?
- Ознакомьтесь детальнее со спецификацией GraphQL, официальной документацией разработчиков и ответами на часто задаваемые вопросое
- Изучите базовый синтаксис GraphQL
- Узнайте о других дополнительных возможностях GraphQL API, доступных при взаимодействии с АЛОР Брокер API: получение массивов данных, постраничный вывод и сортировка данных
- Опробуйте полученные знания в веб-песочнице боевого или тестового контура