BRGM / hubeau

Hub'Eau, la plateforme pour manipuler facilement les données ouvertes sur l'eau
65 stars 10 forks source link

API Prélèvements - retourne code 400 sur dépassement page * size #136

Open tgrandje opened 1 year ago

tgrandje commented 1 year ago

Bonjour

J'utilise une boucle pour récupérer des résultats sur l'API en utilisant les champs "next" retournés par l'API. Lorsque le total des résultats dépasse 20k ouvrages, l'API fonctionne sur les premiers résultats, puis retourne un code 400.

Sur la forme : le message est relativement explicite (encore qu'en anglais): InvalidRequestInvalid stations requestValidatePageDepthplease refine your query. The multiplication ofpage*sizeparameters can not be more than 20000page

Il mériterait sans doute d'être :

Si le nombre de résultats plafonnés est par ailleurs limité, il conviendrait sans doute de retourner le code d'erreur dès la première pagination (le total étant calculé dès la première étape, inutile de se lancer dans une boucle interrompue à 20k enregistrements).

Exemple de requête fonctionnant/bloquées :

Sur le fond :

Je pencherais pour augmenter les volumes de données autorisés par l'API sur les ouvrages.

En effet, il est indiqué que le référentiel des communes/départements utilisé est celui de la BNPE, sans explicitations sur le millésime (ce que je conçois tout à fait compte-tenu du contexte). Il est donc délicat d'attaquer l'API avec une liste de codes communes (au risque de rater un ouvrage référencé sur un code commune obsolète), et la solution d'attaquer la base par code département est (à mon avis) la référence.

tgrandje commented 1 year ago

Nota : contournement possible en requêtant sur les codes communes (réels ou fictifs de 59001 à 59999, etc.).

Supp-Hubeau commented 1 year ago

Bonjour,

Une analyse du count présent sur la première page retournée permettrait de détecter que la requête ne sera pas intégralement servie si cette valeur dépasse la limite de 20000 mentionnée dans la section Limitations de la documentation de l'API.

Cordialement.

tgrandje commented 1 year ago

Bonjour @Supp-Hubeau

Effectivement, on peut bien sûr utiliser le count de cette manière, encore faut-il l'avoir aperçu dans l'onglet limitations (qui se trouve replié par défaut). Pour autant, je trouve le système actuel pas des plus explicites (dans la globalité) :

Je persiste à penser qu'un code d'erreur spécifique devrait être retourné dès la première requête dépassant les 20k. Ce n'est bien sûr pas indispensable, mais me semble relever des "bonnes pratiques" (surtout eu égard aux problèmes de codes communes qui amènent facilement à gonfler le niveau de données demandées à l'API, cf. supra).

Bonne journée