Bah déjà félicitations et merci d'avoir tout bien formalisé.
C'est vraiment du bon boulot, on avance, ça fait réellement plaisir.
Ensuite mes remarques :
Pour le 's' j'ai l'habitude d'en mettre un. Maintenant je comprends ton point de vue et je m'y ferai sans problème mais ça me fait bizarre.
v0.0
On n'a pas la date d'inscription ?
v0.2
Il faudrait compléter (on le fera peut-être quand on y arrivera) mais c'est ici que va se poser la question du stockage de l'ETag notamment. Donc y'a de grosses specs à faire sur ce point.
Talus a parlé de Redis, oui, ça me semble être une bonne idée. L'écueil principal à évaluer c'est de trouver les points de coupe (cf AOP ) qui vont venir invalider le cache.
On peut partir sur une implémentation naïve dans un premier temps : les données sont toujours récupérées en base, le ETag systématiquement calculé, par contre 304 si les valeurs concordent entre If-None-Match
et ETag
.
A nous de voir quand est-ce-qu'on implémente la solution consistant à stocker l'ETag, étant donné qu'on va retrouver ça partout dans toutes les APIs, il va falloir y songer rapidement.
A noter également, que le ETag est dépendant des paramètres de requête. Ainsi, si l'on utilise un cache, la clé sera la requête entière (path + query parameters).
Ca va nécessiter une batterie de tests importantes, car c'est un sujet extrêmement sensible mais qu'on ne peut pas ignorer dans le cadre d'une API grande échelle. Le jour où on a 200 clients (mobiles, ou autres) qui font du polling toutes les 2 secondes sur la liste des forums, on sera bien bien content d'avoir un système d'ETag performant pour ne pas écrouler complètement la base, le serveur, etc.
Autant y réfléchir le plus tôt possible.
v0.3
On pourrait presque la remonter beaucoup plus tôt que ça en y réfléchissant. Tu l'as d'ailleurs écrit : "j'ai omis les champs…", bah en pratique, si j'ai tout bien compris au Django Rest Framework, ça passera par l'écriture d'un Serializer
, non ?
Autant l'écrire le plus tôt possible avant de se tourner vers de grosses problématiques comme le polling différentiel, la pagination et l'authentification.
v0.4
Il faut se pencher dessus rapidement aussi. Et là très honnêtement je vais avoir besoin de vous, et je pense de façon plus générale qu'on va avoir besoin des experts du back.
Mécanique d'authentification ?
OAuth ? Ou truc custom ?
Credentials
Par quel biais l'utilisateur passe-t-il ses credentials lors de toutes les requêtes qui suivront ?
Client-tiers (applications)
Autre question au niveau de l'authentification, est-ce-qu'on peut authentifier des clients qui ne sont pas des utilisateurs loggés, je m'explique.
Il se peut qu'une application décide de crawler le site pour une raison X ou Y, mais de ne pas le faire en tant qu'utilisateur du site.
Par exemple : si j'ai envie de développer un "lecteur d'activité" de ZdS (graphes, stats, …), je vais avoir besoin de récupérer fréquemment la liste des forums, des cours, des membres, … Mais uniquement les données publiques.
Si j'ai 350 clients connectés à un instant donné, je les agrège sur MON serveur et ne polle qu'une seule fois pour tous mes clients (si nouvelles données, je mets à jour les graphes pour TOUS les clients). J'ai pas besoin d'OAuth dans ce cas, je ne "prends pas la place" d'un de mes clients, je suis moi (en tant qu'application reconnue par ZdS et qui dispose de mon propre jeton d'authentification).
Bon c'est un cas marginal, j'en conviens, mais ça m'étonnerait qu'il ne se pose pas.
A mon avis il faut approfondir aussi tôt que possible la mécanique de login.
v0.5
Pour moi le PUT se fait sur membre/{id}
avec une 401 si l'utilisateur n'est pas authentifié, 403 s'il essaie de modifier quelqu'un d'autre que lui. J'aime pas trop les PATH conditionnels comme ça difficiles à retrouver dans des logs par exemple. Tu vas savoir que 568 personnes ont modifié leur profil, mais tu ne sauras pas qui c'est à moins d'aller lire le jeton d'authentification (éventuellement dans un header HTTP, bonjour…) et de faire l'association avec le login, etc. Indémerdable.
Il faut ajouter (en plus de la colonne paramètres) le contenu de la requête PUT. En l'occurence là il y a une vraie décision à prendre : si l'utilisateur poste (put…) un sous-ensemble des champs de son profil, que fait-on du reste ? Comment l'utilisateur supprime-t-il l'un des champs (on parlait de réseaux sociaux dans un autre sujet) ?
v0.6
Idem : définir les champs nécessaires à la création de compte, qui si absents renvoient une erreur 400. Et les champs facultatifs qui seront traités quand même par le serveur.
v0.7
Il y aura plus de paramètres que ça je pense. Autant voir large histoire de se rendre compte des difficultés techniques que ça pourrait poser.
-
date d'inscription : before / after
-
lastVisit : before / after
-
filtre sur les groupe (staff / admin)
v0.8
C'est le plus gros morceau. Je me demande s'il ne faut pas la laisser de côté.
Voilà, encore une fois merci et j'espère qu'on va bien avancer sur ce sujet !