API Pagination (Cursor vs Offset)

Architecture 🟡 Mid

Définition

Offset : skip/limit simple mais instable sur les données qui changent. Cursor : basée sur un marqueur stable, performante a grande échelle.

Analogie

Offset : 'page 5 d'un livre' (instable si on ajoute des pages). Cursor : 'lire a partir du marque-page' (toujours fiable).

Exemple de code

// Offset: GET /users?page=3&limit=20
// Cursor: GET /users?after=eyJpZCI6MTAwfQ&limit=20
const cursor = Buffer.from(JSON.stringify({ id: lastId })).toString('base64');

Cas d'usage

Offset pour les petits datasets avec UI de pages. Cursor pour les feeds infinis et les APIs a fort volume.

Anti-pattern

Offset sur des millions de lignes — performances catastrophiques avec OFFSET 100000.

Termes liés

#architecture#interview#api#best-practice

En entretien

  1. Quelle différence entre pagination offset et cursor ?

    L'offset fait un skip/limit simple mais devient instable si les données changent, alors que le cursor s'appuie sur un marqueur stable et reste performant à grande échelle.

  2. Quand choisir l'un plutôt que l'autre ?

    L'offset convient aux petits datasets avec une UI de pages numérotées, le cursor aux feeds infinis et aux APIs à fort volume.

  3. Pourquoi éviter l'offset sur des millions de lignes ?

    Parce qu'un OFFSET sur une table de cette taille a des performances catastrophiques ; c'est l'anti-pattern classique de la pagination par offset.

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre