Partager via


Filtrage des données dans REST ($filter)

Le filtrage limite les jeux de données volumineux uniquement aux enregistrements dont vous avez besoin. Dans REST, le générateur d’API de données (DAB) prend en charge un paramètre de requête inspiré par $filter OData. Chaque filtre se compile en SQL paramétrable pour assurer la sécurité et la cohérence.

Aperçu rapide

Operator Meaning
eq égal
ne différent de
gt supérieur à
ge supérieur ou égal à
lt inférieur à
le inférieur ou égal à
and AND logique
or OR logique
not logique NOT
( ) groupement

eq

Égal à. Retourne les enregistrements où la valeur d’un champ correspond exactement au littéral fourni ou null.

Dans cet exemple, nous obtenons des livres où le titre est égal 'Dune', l’indicateur disponible est vrai, le prix est 20, la date de publication est le 1er janvier 2024 et l’évaluation est 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

Note

$filter prend en charge eq null et ne null directement pour les comparaisons null.

SQL conceptuel

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

Pas égal à. Retourne les enregistrements où la valeur d’un champ ne correspond pas au littéral donné ou n’est pas null.

Dans cet exemple, nous obtenons des livres où le titre n’est pas 'Foundation', l’indicateur disponible n’est pas faux, le prix n’est pas zéro, la date de publication n’est pas le 31 décembre 2023 et l’évaluation n’est pas 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

Note

Lors du filtrage sur les champs date ou datetime, utilisez le format UTC ISO 8601 non cité (yyyy-MM-ddTHH:mm:ssZ). Les formats de style OData entre guillemets ou OData ne sont pas valides.

  • Incorrect : $filter=Date ge '2025-01-01'
  • Incorrect : $filter=Date ge datetime'2025-01-01'
  • C’est bien ça: $filter=Date ge 2025-01-01T00:00:00Z

SQL conceptuel

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

Plus grand que. Retourne les enregistrements où la valeur d’un champ est strictement supérieure au littéral donné.

Dans cet exemple, nous obtenons des livres dont le titre trie par ordre alphabétique 'A', l’indicateur disponible est vrai, le prix est supérieur à 10 et la date de publication est postérieure au 1er janvier 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 conceptuel

SELECT * FROM Books
WHERE title > 'A'
  AND available > 0
  AND price > 10
  AND published_on > '2020-01-01T00:00:00Z';

ge

Supérieur ou égal. Retourne les enregistrements où la valeur d’un champ est supérieure ou égale au littéral donné.

Dans cet exemple, nous obtenons des livres dont le titre est 'A' ou une version ultérieure, l’indicateur disponible est vrai, le prix est au moins 10 et la date de publication est le 1er janvier 2020 ou après le 1er janvier 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 conceptuel

SELECT * FROM Books
WHERE title >= 'A'
  AND available >= 0
  AND price >= 10
  AND published_on >= '2020-01-01T00:00:00Z';

lt

Moins de. Retourne les enregistrements où la valeur d’un champ est strictement inférieure au littéral donné.

Dans cet exemple, nous obtenons des livres dont le titre trie avant 'Z', l’indicateur disponible est faux, le prix est inférieur à 50 et la date de publication est antérieure au 1er janvier 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 conceptuel

SELECT * FROM Books
WHERE title < 'Z'
  AND available < 1
  AND price < 50
  AND published_on < '2030-01-01T00:00:00Z';

le

Inférieur ou égal. Retourne les enregistrements où la valeur d’un champ est inférieure ou égale au littéral donné.

Dans cet exemple, nous obtenons des livres dont le titre trie avant ou égal à 'Z', l’indicateur disponible est vrai, le prix est de 100 ou moins, et la date de publication est le 1er janvier 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 conceptuel

SELECT * FROM Books
WHERE title <= 'Z'
  AND available <= 1
  AND price <= 100
  AND published_on <= '2030-01-01T00:00:00Z';

and

AND logique. Combine plusieurs conditions qui doivent toutes être vraies pour qu’un enregistrement corresponde.

Dans cet exemple, nous obtenons des livres où le titre est 'Dune', l’indicateur disponible est vrai, le prix est inférieur à 50, la date de publication est postérieure au 1er janvier 2020 et l’évaluation est 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 conceptuel

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

OR logique. Combine les conditions où au moins une doit être vraie pour qu’un enregistrement corresponde.

Dans cet exemple, nous obtenons des livres où le titre est 'Dune', ou l’indicateur disponible est vrai, ou le prix est supérieur à 20, ou la date de publication est antérieure au 1er janvier 2025, ou l’évaluation est 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 conceptuel

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

Non logique. Annule une condition afin que les enregistrements soient retournés uniquement si la condition est false.

Dans cet exemple, nous obtenons tous les livres qui n’ont pas le titre 'Romance', ne sont pas indisponibles, ne coûtent pas moins de 10 $, n’ont pas été publiés avant le 1er janvier 2020 et n’ont pas d’évaluation null.

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 conceptuel

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
);

( ) groupement

Regroupe les sous-expressions afin de pouvoir contrôler l’ordre d’évaluation dans les filtres complexes.

Dans cet exemple, nous obtenons des livres où le titre est 'Fiction''SciFi'ou , et le livre est disponible ou prix inférieur à 25 $, et la date de publication est postérieure au 1er janvier 2020, et l’évaluation est 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 conceptuel

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;

Exemple de configuration

{
  "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" ]
        }
      }
    }
  }
}

Voir aussi

Concept REST GraphQL Objectif
Projection $select Éléments Choisir les champs à retourner
Filtrage $filter filtre Restreindre les lignes par condition
Tri $orderby orderBy Définir l’ordre de tri
Taille de la page $first first Limiter le nombre d’éléments par page
Continuation $after après Continuer à partir de la dernière page à l’aide d’un curseur

Note

Les mots clés REST commencent par $les conventions OData suivantes.