Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Фильтрация сужает большие наборы данных только к нужным записям. В REST построитель API данных (DAB) поддерживает параметр запроса, вдохновленный $filter OData. Каждый фильтр компилируется в параметризованный SQL для обеспечения безопасности и согласованности.
Краткий обзор
| Operator | Meaning |
|---|---|
eq |
равный |
ne |
не равно |
gt |
больше чем |
ge |
больше или равно |
lt |
Менее |
le |
меньше или равно |
and |
логический И |
or |
логический ИЛИ |
not |
логическое НЕ |
( ) |
группировка |
eq
Равно. Возвращает записи, в которых значение поля точно соответствует предоставленному литералу или null.
В этом примере мы получаем книги, где название равно 'Dune', доступный флаг имеет значение true, цена составляет 20, дата публикации — 1 января 2024 года, а рейтинг равен NULL.
GET /api/books?$filter=
title eq 'Dune' and
available eq true and
price eq 20 and
published_on eq 2024-01-01T00:00:00Z and
rating eq null
Замечание
$filter поддерживает eq null и ne null напрямую для сравнения значений NULL.
Концептуальный SQL
SELECT * FROM Books
WHERE title = 'Dune'
AND available = 1
AND price = 20
AND published_on = '2024-01-01T00:00:00Z'
AND rating IS NULL;
ne
Не равно. Возвращает записи, в которых значение поля не соответствует заданному литералу или не имеет значения NULL.
В этом примере мы получаем книги, где название не является 'Foundation', доступный флаг не false, цена не равна нулю, опубликованная дата не является 31 декабря 2023 года, а рейтинг не имеет значения NULL.
GET /api/books?$filter=
title ne 'Foundation' and
available ne false and
price ne 0 and
published_on ne 2023-12-31T00:00:00Z and
rating ne null
Замечание
При фильтрации по полям даты или даты и времени используйте неквотируемый формат ISO 8601 UTC (yyyy-MM-ddTHH:mm:ssZ).
Недопустимые форматы в стиле OData или кавычки.
- Неправильно:
$filter=Date ge '2025-01-01' - Неправильно:
$filter=Date ge datetime'2025-01-01' - Правильно:
$filter=Date ge 2025-01-01T00:00:00Z
Концептуальный SQL
SELECT * FROM Books
WHERE title <> 'Foundation'
AND available <> 0
AND price <> 0
AND published_on <> '2023-12-31T00:00:00Z'
AND rating IS NOT NULL;
gt
Больше. Возвращает записи, в которых значение поля строго выше заданного литерала.
В этом примере мы получаем книги, названия которых сортируются по алфавиту по 'A'алфавиту, доступный флаг имеет значение true, цена превышает 10, а дата публикации — после 1 января 2020 года.
GET /api/books?$filter=
title gt 'A' and
available gt false and
price gt 10 and
published_on gt 2020-01-01T00:00:00Z
Концептуальный SQL
SELECT * FROM Books
WHERE title > 'A'
AND available > 0
AND price > 10
AND published_on > '2020-01-01T00:00:00Z';
ge
Больше или равно. Возвращает записи, в которых значение поля выше или равно заданному литералу.
В этом примере мы получаем книги с названием 'A' или более поздней версией, доступный флаг имеет значение true, цена составляет не менее 10, а дата публикации — 1 января 2020 г.
GET /api/books?$filter=
title ge 'A' and
available ge false and
price ge 10 and
published_on ge 2020-01-01T00:00:00Z
Концептуальный SQL
SELECT * FROM Books
WHERE title >= 'A'
AND available >= 0
AND price >= 10
AND published_on >= '2020-01-01T00:00:00Z';
lt
Менее. Возвращает записи, в которых значение поля строго ниже заданного литерала.
В этом примере мы получаем книги, названия которых сортируются до 'Z', доступный флаг имеет значение false, цена меньше 50, а дата публикации — до 1 января 2030 года.
GET /api/books?$filter=
title lt 'Z' and
available lt true and
price lt 50 and
published_on lt 2030-01-01T00:00:00Z
Концептуальный SQL
SELECT * FROM Books
WHERE title < 'Z'
AND available < 1
AND price < 50
AND published_on < '2030-01-01T00:00:00Z';
le
Меньше или равно. Возвращает записи, в которых значение поля меньше или равно заданному литералу.
В этом примере мы получаем книги, названия которых сортируются до или равно 'Z', доступный флаг имеет значение true, цена составляет 100 или меньше, а дата публикации — до 1 января 2030 г.
GET /api/books?$filter=
title le 'Z' and
available le true and
price le 100 and
published_on le 2030-01-01T00:00:00Z
Концептуальный SQL
SELECT * FROM Books
WHERE title <= 'Z'
AND available <= 1
AND price <= 100
AND published_on <= '2030-01-01T00:00:00Z';
and
Логический И. Объединяет несколько условий, которые должны соответствовать записи.
В этом примере мы получаем книги, где заголовок 'Dune', доступный флаг имеет значение true, цена меньше 50, опубликованная дата будет после 1 января 2020 года, а рейтинг равен NULL.
GET /api/books?$filter=
title eq 'Dune' and
available eq true and
price lt 50 and
published_on ge 2020-01-01T00:00:00Z and
rating eq null
Концептуальный SQL
SELECT * FROM Books
WHERE title = 'Dune'
AND available = 1
AND price < 50
AND published_on >= '2020-01-01T00:00:00Z'
AND rating IS NULL;
or
Логический ИЛИ. Объединяет условия, в которых должно быть по крайней мере одно значение true для соответствующей записи.
В этом примере мы получаем книги, в которых имеется название 'Dune', или доступный флаг имеет значение true, или цена превышает 20, или дата публикации до 1 января 2025 г. или оценка имеет значение NULL.
GET /api/books?$filter=
title eq 'Dune' or
available eq true or
price gt 20 or
published_on lt 2025-01-01T00:00:00Z or
rating eq null
Концептуальный SQL
SELECT * FROM Books
WHERE title = 'Dune'
OR available = 1
OR price > 20
OR published_on < '2025-01-01T00:00:00Z'
OR rating IS NULL;
not
Логический НЕ. Отменяет условие, поэтому записи возвращаются только в том случае, если условие равно false.
В этом примере мы получаем все книги, которые не имеют названия 'Romance', не недоступны, не стоят менее $ 10, не были опубликованы до 1 января 2020 года и не имеют нулевой оценки.
GET /api/books?$filter=
not (
title eq 'Romance' and
available eq false and
price lt 10 and
published_on lt 2020-01-01T00:00:00Z and
rating eq null
)
Концептуальный SQL
SELECT * FROM Books
WHERE NOT (
title = 'Romance'
AND available = 0
AND price < 10
AND published_on < '2020-01-01T00:00:00Z'
AND rating IS NULL
);
( ) группировка
Группирует вложенные выражения, чтобы управлять порядком оценки в сложных фильтрах.
В этом примере мы получаем книги, где название 'Fiction' либо, либо 'SciFi', и книга доступна или цена ниже $ 25, и дата публикации после 1 января 2020 года, и рейтинг имеет значение NULL.
GET /api/books?$filter=
(title eq 'Fiction' or title eq 'SciFi') and
(available eq true or price lt 25) and
published_on ge 2020-01-01T00:00:00Z and
rating eq null
Концептуальный SQL
SELECT * FROM Books
WHERE (title = 'Fiction' OR title = 'SciFi')
AND (available = 1 OR price < 25)
AND published_on >= '2020-01-01T00:00:00Z'
AND rating IS NULL;
Пример конфигурации
{
"runtime": {
"pagination": {
"default-page-size": 100,
"max-page-size": 100000
}
},
"entities": {
"Book": {
"source": {
"type": "table",
"object": "dbo.books"
},
"mappings": {
"sku_title": "title",
"sku_price": "price"
},
"relationships": {
"book_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
}
},
"Category": {
"source": {
"type": "table",
"object": "dbo.categories"
},
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
См. также
| Понятие | REST | GraphQL | Цель |
|---|---|---|---|
| Projection | $select | items | Выбор возвращаемых полей |
| Filtering | $filter | фильтр | Ограничение строк по условию |
| Сортировка | $orderby | orderBy | Определение порядка сортировки |
| Размер страницы | $first | first | Ограничение количества элементов на страницу |
| Продолжение | $after | после | Продолжить с последней страницы с помощью курсора |
Замечание
Ключевые слова REST начинаются с $следующих соглашений OData.