J'ai besoin d'un URI dans mon REST pour récupérer l'utilisateur actuellement connecté. Habituellement, j'utilise GET
sur la ressource avec l'ID, mais le client ne le fait pas connais pas l'ID de l'utilisateur.
J'ai trouvé les solutions suivantes:
Par nom d'utilisateur
Cette solution utilise le nom d'utilisateur au lieu de l'ID de l'utilisateur.
Exemple:
GET /user/{userSlug}
Avec ressources propres
Cette solution a une ressource pour les utilisateurs et une ressource supplémentaire pour l'utilisateur connecté.
Exemples:
JIRA REST : GET /myself
GitHub REST : GET /user
Stack Exchange REST : GET /me
Avec lien symbolique
Cette solution a un lien symbolique pour l'ID de l'utilisateur.
Exemple:
GET /user/current
Avec filtre
Cette solution utilise un filtre pour le nom d'utilisateur.
Exemple:
GET /user?username={username}
Lequel est le plus reposant? Quels sont les avantages et inconvénients?
C'est à vous de décider. Toutes les approches sont parfaitement bien du point de vue REST.
Selon la thèse de Roy Thomas Fielding*, toute information pouvant être nommée peut être une ressource:
5.2.1.1 Ressources et identificateurs de ressources
L'abstraction clé des informations dans REST est une ressource. Toute information qui peut être nommée peut être une ressource: un document ou une image, un service temporel (par exemple "d'aujourd'hui" météo à Los Angeles "), une collection d'autres ressources, un objet non virtuel (par exemple une personne), etc. En d'autres termes, tout concept qui pourrait être la cible de la référence hypertexte d'un auteur doit correspondre à la définition de une ressource. Une ressource est un mappage conceptuel à un ensemble d'entités, pas l'entité qui correspond au mappage à un moment donné. [...]
Lors de l'utilisation de /me
, /users/me
, /users/myself
, /users/current
et similaires, vous avez un localisateur pour tilisateur authentifié et il identifiera toujours le concept d'un tilisateur authentifié, quel que soit l'utilisateur est authentifié.
Pour plus de flexibilité, vous pouvez également prendre en charge /users/{username}
.
Soit dit en passant, une situation similaire a été abordée dans Est-ce que l'utilisation d'identificateurs de ressources magiques (moi/moi) va à l'encontre des principes REST?
* Si vous êtes intéressé par REST, le chapitre 5 de la thèse de Fielding est une lecture incontournable.