-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Cars] locations/signals : Comment gérer la pagination ? #47
Comments
Bonjour Joseph, Sur nos APIs le paramètre limite est plutôt là pour éviter une surcharge que pour gérer la pagination. Aujourd'hui, nous pensons qu'une pagination de date à date permet de rentre l'API plus intuitive dans bon nombre de cas. Cette limite sert par exemple à obtenir les 10 dernières positions GPS connues. En revanche l'idée d'un |
Une pagination date à date est effectivement très intuitive... ou pas. Le propre d'une pagination c'est d'avoir des packets de données limités et constants. Avec le fonctionnement actuel on a 2 techniques possibles :
Problèmes :
En tout cas très intéressé pour une astuce à ce sujet ;) |
Juste pour apporter quelques éléments: |
Pour le coup, j'ai du mal à saisir le problème. Si la requête jour/jour est faite a |
@denouche Le HTTP 206 est surtout utilisé pour le streaming de fichier lourds (images/vidéos/zip/tar) pour lesquels on veut que le téléchargement soit résistant aux interruptions. Le header @quentin7b En effet avec une requête jour/jour faite a Cas d'usage où une pagination basique est essentielle :
L'impossibilité de prédire la taille de la réponse est problématique. |
Une autre solution pour faciliter le traitement des résultats locations/signals seraient de retourner les données dans un format CSV. Si 1 ligne = 1 donnée, il très facile de garder l'ensemble du résultat sous une forme peu consommatrice en mémoire, et d'itérer à son rythme sur toutes les lignes. Pour les locations :
exemple :
Pour les signals :
exemple :
Putting the timestamp first allows quick filter/sort/inverse by date, before parsing ;) |
Sur les endpoints /cars/{id}/locations et /cars/{id}/signals on peut ajouter un paramètre
limit
,ce qui permet de faire à peu près le même effet que de la pagination,
mais dans le résultat que retourne l'API on ne voit pas si ce paramètre a eu un effet... ou pas.
On ne peut donc pas savoir si il est nécessaire de faire une requête supplémentaire pour avoir toutes les datas sur la période de temps initialement demandée.
A minima, un header HTTP serait utile pour donner le nombre total de résultats :
Xee-Limit-Total-Results: 350000
(350 000 est un cas réel sur un de nos véhicules)Idéalement, vous pourriez fournir un header
Link
pour donner l'url de la page suivante (best practice des API REST), en conservant les paramètres de la requête initiale. Il suffirait juste de modifier le paramètreend
pour qu'ils ne sélectionnent pas les locations déjà retournés :Avez-vous d'autres solutions en tête ?
Comment faire en attendant ?
The text was updated successfully, but these errors were encountered: