J'aimerais avoir de l'aide pour gérer un cas limite étrange avec une API paginée que je suis en train de créer.
Comme beaucoup d'API, celle-ci pagine les grands résultats. Si vous interrogez /foos, vous obtiendrez 100 résultats (c'est-à-dire foo #1-100), et un lien vers /foos?page=2 qui devrait retourner foo #101-200.
Malheureusement, si foos #10 est supprimé de l'ensemble de données avant que le consommateur d'API n'effectue la requête suivante, /foos?page=2 sera décalé de 100 et renverra foos #102-201.
C'est un problème pour les consommateurs de l'API qui essaient de tirer tous les foo - ils ne recevront pas le foo #101.
Quelle est la meilleure pratique pour gérer cela ? Nous aimerions que ce soit aussi léger que possible (c'est-à-dire éviter de gérer les sessions pour les demandes d'API). Des exemples d'autres API seraient très appréciés !
1 votes
Quel est le problème ici ? cela me semble correct, de toute façon l'utilisateur aura 100 articles.
0 votes
Je viens d'éditer la question - le problème est que le foo #101 n'apparaîtra pas dans les résultats et qu'un consommateur d'API essayant d'extraire tous les foos en manquera un.
2 votes
J'ai été confronté à ce même problème et je cherche une solution. A ma connaissance, il n'y a pas vraiment de mécanisme solide et garanti pour accomplir ceci, si chaque page exécute une nouvelle requête. La seule solution à laquelle je pense est de garder une session active, et de conserver l'ensemble des résultats côté serveur, et plutôt que d'exécuter de nouvelles requêtes pour chaque page, de simplement récupérer le prochain ensemble d'enregistrements mis en cache.
0 votes
Oh, je viens de voir la partie de votre question où vous voulez éviter ce scénario.
34 votes
Découvrez comment twitter y parvient dev.twitter.com/rest/public/timelines
1 votes
@java_geek Comment le paramètre since_id est-il mis à jour ? Sur la page web de Twitter, il semble que les deux requêtes soient effectuées avec la même valeur pour le paramètre since_id. Je me demande quand il sera mis à jour pour que les nouveaux tweets soient pris en compte s'ils sont ajoutés ?
1 votes
@Petar Le paramètre since_id doit être mis à jour par le consommateur de l'API. Si vous voyez, l'exemple fait référence aux clients qui traitent les tweets.
0 votes
L'architecture de pagination que vous avez décrite s'appelle pagination décalée et le problème que vous avez décrit est connu sous le nom de inclinaison de la page . Il s'agit d'un inconvénient reconnu lorsqu'on utilise les offsets pour interroger des ensembles de résultats qui peuvent être réorganisés ou dont des éléments peuvent être supprimés en cours de session. La solution consiste à choisir une autre architecture de pagination. API Paging Built The Right Way propose une comparaison succincte des architectures de pagination : engineering.mixmax.com/blog/api-paging-built-the-right-way