Projet

Général

Profil

Development #57567

ajouter un paramètre full à l’api de synchronisation

Ajouté par Paul Marillonnet il y a plus de 2 ans. Mis à jour il y a plus de 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
04 octobre 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à Hobo - Development #45276: commande de resynchronisation des utilisateursEn cours20 juillet 2020

Actions
Lié à Authentic 2 - Development #58312: inclure les nouveaux usagers au paramètre full de l’api de synchronisation (?)Nouveau02 novembre 2021

Actions

Révisions associées

Révision 42f2571f (diff)
Ajouté par Paul Marillonnet il y a plus de 2 ans

api: add a full_known_users option to /synchronization/ endpoint (#57567)

Historique

#1

Mis à jour par Paul Marillonnet il y a plus de 2 ans

#2

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.

#3

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 :)

#4

Mis à jour par Paul Marillonnet il y a plus de 2 ans

  • Statut changé de Nouveau à En cours
#5

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.

#6

Mis à jour par Paul Marillonnet il y a plus de 2 ans

  • Description mis à jour (diff)
#7

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.

#8

Mis à jour par Paul Marillonnet il y a plus de 2 ans

Paul Marillonnet a écrit :

Parce que c’est pour la synchro et que c’est la solution qui me semble encore la plus simple.

Voilà, une option 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.
#9

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).

#10

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.

#11

Mis à jour par Paul Marillonnet il y a plus de 2 ans

Voilà, sans la pagination c’est vraiment plus succinct.

#12

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.

#13

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.

#14

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)
#15

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é
#16

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

Formats disponibles : Atom PDF