Partager via


Pagination avec $after dans REST

La pagination réduit les jeux de données volumineux à des pages plus petites et gérables. Dans REST, le générateur d’API de données (DAB) utilise le paramètre de requête pour la $afterpagination du jeu de clés, fournissant une traversée stable et efficace par le biais de résultats ordonnés. Chaque jeton marque la position du dernier enregistrement de la page précédente, ce qui permet à la requête suivante de continuer à partir de ce point. Contrairement à la pagination de décalage, la pagination du jeu de clés empêche les lignes manquantes ou dupliquées lorsque les données changent entre les requêtes.

Accédez à la version GraphQL de ce document.

Aperçu rapide

Concept Descriptif
$after Jeton de continuation opaque retourné par la demande précédente
$first Nombre maximal d’enregistrements à extraire par page
nextLink L’URL de la page suivante inclut $after

Pagination de base

Dans cet exemple, nous obtenons les trois premiers livres.

Requête HTTP

GET /api/books?$first=3

SQL conceptuel

SELECT TOP (3)
  id,
  sku_title AS title
FROM dbo.books
ORDER BY id ASC;

Exemple de réponse

{
  "value": [
    { "id": 1, "title": "Dune" },
    { "id": 2, "title": "Foundation" },
    { "id": 3, "title": "Hyperion" }
  ],
  "nextLink": "/api/books?$first=3&$after=eyJpZCI6M30="
}

Note

Dans next-link-relative=true la configuration, nextLink contient un chemin relatif ; sinon, il s’agit d’une URL absolue.

Continuation avec $after

Le $after paramètre spécifie le jeton de continuation de la page suivante. La valeur est une chaîne encodée en base64 représentant le dernier enregistrement de la page précédente.

Avertissement

$after contient un jeton opaque qui identifie l’endroit où la dernière page s’est terminée. Traitez les jetons comme immuables et n’essayez jamais de les construire ou de les modifier.

Dans cet exemple, nous obtenons les trois livres suivants après le jeton de la dernière page.

Requête HTTP

GET /api/books?$first=3&$after=eyJpZCI6M30=

SQL conceptuel

SELECT TOP (3)
  id,
  sku_title AS title
FROM dbo.books
WHERE id > 3
ORDER BY id ASC;

Exemple de réponse

{
  "value": [
    { "id": 4, "title": "I, Robot" },
    { "id": 5, "title": "The Left Hand of Darkness" },
    { "id": 6, "title": "The Martian" }
  ],
  "nextLink": "/api/books?$first=3&$after=eyJpZCI6Nn0="
}

Fin des données

En nextLink cas d’absence, il n’y a plus d’enregistrements à extraire. La réponse finale de la page inclut uniquement un value tableau sans .nextLink

Exemple de réponse

{
  "value": [
    { "id": 7, "title": "Rendezvous with Rama" },
    { "id": 8, "title": "The Dispossessed" }
  ]
}

Note

Tout schéma ou modification de classement invalide les jetons émis précédemment. Les clients doivent redémarrer la pagination à partir de la première page.

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.