Pour le site sur lequel nous travaillons, nous sommes en train d'améliorer nos URL pour un type de ressource - en particulier, nous nous éloignons des ID numériques vers des chaînes descriptives uniques. Un exemple similaire serait de passer de l'identification des utilisateurs par ID de base de données numérique à leur identification par nom d'utilisateur (pas notre cas spécifique, mais analogue). Ainsi, une URL pour accéder aux informations d'un utilisateur utilisé pour ressembler à:REST - Prise en charge de plusieurs identifiants possibles
/users/48573
Et maintenant il ressemble à
/users/thisisausername.
Le seul problème est que nous avons encore besoin de pouvoir les récupérer par ID numériques en quelque sorte , pour les utilisateurs hérités de l'API. Nous n'avons pas besoin des URL REST elles-mêmes pour rediriger (par exemple, /users/48573
ne doit pas rediriger vers /users/thisisausername
), nous avons juste besoin d'une méthode pour obtenir les bonnes données en utilisant l'ancien identifiant. La solution devrait soit fournir un moyen alternatif d'accéder aux informations de l'utilisateur (ce qui inclut commodément le nouvel identifiant, le nom d'utilisateur) par ID, soit accéder uniquement au nom d'utilisateur par ID. Certaines solutions possibles peuvent être:
- L'utilisation d'un noeud pour spécifier une autre méthode d'identification, par ex. Utilisation d'un paramètre de requête pour spécifier une autre méthode d'identification, par ex.
/users/48573?fetchby=id
ou/users/48573?byid=true
- Traiter le nom d'utilisateur par ID comme une autre ressource, par ex.
/identifiers/username/48573
Lequel (le cas échéant) est le plus proche du bon REST? Comment traiteriez-vous le problème?
J'ai fini par mettre en œuvre l'accès par des champs non-principal-identifiant comme une recherche. Cette solution permet d'extraire plusieurs types de ressources via plusieurs champs, tout en n'en conservant qu'un comme identificateur principal. Par souci de cohérence, les API "search" renvoient des listes. Ainsi, la manière officielle d'accéder à un utilisateur est: /user/thisisausername et l'accès par ID, nous avons: /utilisateurs id = 48573 De même, nous pourrions effectuer une recherche sur un certain nombre de domaines , dans: /users? firstName = Kelly Source d'inspiration: http://jwyseur.blogspot.com/2008/12/uri-design-for-rest.html (voir "recherche d'une ressource") –
Alors vous avez mis en cache sur la mise en cache? J'ai le même problème que vous, mais je ne peux pas les résoudre via des paramètres de requête qui suppriment l'un des principaux avantages d'une API REST. J'aime votre première suggestion à puces ... – HDave