Development #57567
ajouter un paramètre full à l’api de synchronisation
0%
Description
plutôt qu’un seul uuid à la fois comme c’est le cas actuellement.l’objectif est #45276 où on aurait via 57564 la liste des usagers modifiés, dont on viendrait ensuite ici récupérer les détails pour appliquer les modifications dans les autres briques.
le paramètre full permettrait de retourner les utilisateurs complets, pas simplement les UUIDs.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Paul Marillonnet il y a plus de 2 ans
- Lié à Development #45276: commande de resynchronisation des utilisateurs ajouté
Mis à jour par Paul Marillonnet il y a plus de 2 ans
On fait déjà ça quelque part dans Publik ?
J’imaginais ce comportement enclenché par une requête GET sur /api/users/?uuids=<uuid1>,<uuid2>,<uuid3>,…
mais il y a peut-être une approche plus élégante.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
Réponse générale :
Pour une querystring, la manière de passer des arguments multiples c'est généralement de passer plusieurs fois le paramètre (en php c'est souvent codifié en ajoutant []
au nom du paramètre), donc ici ce serait ?uuids=<uuid1>&uuids=<uuid2>&...
.
Réponse particulière :
Non c'est vrai qu'on n'a pas ça ailleurs, mais on a pas deux web-services pareil à part la structure des réponses, on a jamais vraiment codifié la forme des requêtes. Dans ma réponse sur la commande je propose aussi de toute faire dans synchronization si tu veux, i.e. d'ajouter un paramètre full=true
par exemple qui au lieu de simplement renvoyer les uuids renvoie les utilisateurs complets, avec un minimum de pagination.
Une autre solution serait de proposer une API à part pour faire des trucs "batch" /api/batch/, inspiré de SCIM, parce qu'avec la query-string on sera limité sur le nombre d'uuid qu'on peut passer (à 38 caractères par paramètre uuid, et disons une limite d'URL à 2Ko, on pourra en passer pas beaucoup plus de 50, ce qui niveau "batching" n'est pas terrible.
POST /api/batch/ { "atomic": False, (valeur par défaut) "requests": [ { "path": "/api/user/", "query": {"uuid": "...."}, }, .... }
c'est un peu pédestre mais c'est clair au moins.
Encore une autre possibilité c'est que si &modified_gt=..
prend bien en compte les changements sur les rôles, on a besoin de rien d'autre, /api/synchronization/
n'a à qu'à gérer un &since=...
pour les suppressions d'utilisateurs, /api/user/
peut gérer tous les changements.
Ou encore on ajoute un include-deleted=true
à /api/user/
qui renverrait des enregistrements de la forme {"uuid":...., "deleted": "<date-de-suppression>"}
.
Voilà, choisis ton poison :)
Mis à jour par Paul Marillonnet il y a plus de 2 ans
- Sujet changé de étendre /api/users/ pour qu’elle puisse requêter une liste d’uuids à ajouter un paramètre full à l’api de synchronisation
Parce que c’est pour la synchro et que c’est la solution qui me semble encore la plus simple.
Mis à jour par Paul Marillonnet il y a plus de 2 ans
J’ai poussé un commit de ce genre dans la branche, je regarde pour la pagination après lecture de la page de doc DRF à ce sujet avec lequel je ne suis pas très familier.
Mis à jour par Paul Marillonnet il y a plus de 2 ans
- Fichier 0001-api-add-a-full_known_users-option-to-synchronization.patch 0001-api-add-a-full_known_users-option-to-synchronization.patch ajouté
- Statut changé de En cours à Solution proposée
- Patch proposed changé de Non à Oui
Paul Marillonnet a écrit :
Voilà, une optionParce que c’est pour la synchro et que c’est la solution qui me semble encore la plus simple.
full_known_users
à cette API, qui :
- supporte de la pagination (avec un peu de code custom parce que dans notre cas d’usage on ne peut pas faire avec ce que DRF propose de façon native) ;
- ne reprend pas les identifiants inconnus, car il me semble que cette redondance n’a pas d’intérêt surtout si l’on tient compte de la pagination sur les informations d’utilisateurs connus renvoyées.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à En cours
- Assigné à mis à Paul Marillonnet
C'est finalement assez moche car il me semble que la pagination n'est pas tellement nécessaire finalement, pourvu que le client envoie une liste d'uuid inférieure à la taille maximum d'une page (c'est le client qui va paginer sa liste d'uuid en fait). Ça ne ressemble pas à une API qu'on voudrait supporter longtemps, je dirai de virer la partie pagination et de juste vérifier que la liste d'uuid ne dépasse pas une limite qu'on se fixe, comme 1000 (sans passer par MAX_PAGE_SIZE).
Mis à jour par Paul Marillonnet il y a plus de 2 ans
Benjamin Dauvergne a écrit :
je dirai de virer la partie pagination et de juste vérifier que la liste d'uuid ne dépasse pas une limite qu'on se fixe, comme 1000 (sans passer par MAX_PAGE_SIZE).
Ok.
Mis à jour par Paul Marillonnet il y a plus de 2 ans
- Fichier 0001-api-add-a-full_known_users-option-to-synchronization.patch 0001-api-add-a-full_known_users-option-to-synchronization.patch ajouté
- Statut changé de En cours à Solution proposée
Voilà, sans la pagination c’est vraiment plus succinct.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à Solution validée
Je vois que tu as choisi de ne pas faire couiner a2 quand ça dépasse 1000, soit. Je pense que sur cette base tu peux continuer ton code de synchro mais tu n'auras pas les nouveaux utilisateurs.
Mis à jour par Paul Marillonnet il y a plus de 2 ans
Benjamin Dauvergne a écrit :
Je vois que tu as choisi de ne pas faire couiner a2 quand ça dépasse 1000, soit. Je pense que sur cette base tu peux continuer ton code de synchro mais tu n'auras pas les nouveaux utilisateurs.
Je regarde d’abord comment inclure #57564 par dessus ce travail, ensuite se posera la question des nouveaux usagers.
Mis à jour par Paul Marillonnet il y a plus de 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 42f2571feddf91f4253f513ebd31a23aa1568cdc Author: Paul Marillonnet <pmarillonnet@entrouvert.com> Date: Fri Oct 22 10:41:44 2021 +0200 api: add a full_known_users option to /synchronization/ endpoint (#57567)
Mis à jour par Paul Marillonnet il y a plus de 2 ans
- Lié à Development #58312: inclure les nouveaux usagers au paramètre full de l’api de synchronisation (?) ajouté
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
api: add a full_known_users option to /synchronization/ endpoint (#57567)