Je n'aime pas voir la {id}partie des URL se chevaucher avec des sous-ressources, car cela idpourrait théoriquement être n'importe quoi et il y aurait une ambiguïté. Il mélange différents concepts (identifiants et noms de sous-ressources).
Des problèmes similaires sont souvent vus dans des enumconstantes ou dossier structures, où les différents concepts sont mélangés (par exemple, lorsque vous avez des dossiers Tigers, Lionset Cheetahs, puis aussi un dossier appelé Animalsau même niveau - cela n'a aucun sens que l' on est un sous - ensemble de la autre).
En général, je pense que la dernière partie nommée d'un point de terminaison devrait être singulière si elle concerne une seule entité à la fois, et plurielle si elle traite d'une liste d'entités.
Donc, les points de terminaison qui traitent avec un seul utilisateur:
GET /user -> Not allowed, 400
GET /user/{id} -> Returns user with given id
POST /user -> Creates a new user
PUT /user/{id} -> Updates user with given id
DELETE /user/{id} -> Deletes user with given id
Ensuite, il existe une ressource distincte pour effectuer des requêtes sur les utilisateurs, qui retournent généralement une liste:
GET /users -> Lists all users, optionally filtered by way of parameters
GET /users/new?since=x -> Gets all users that are new since a specific time
GET /users/top?max=x -> Gets top X active users
Et voici quelques exemples d'une sous-ressource qui traite avec un utilisateur spécifique:
GET /user/{id}/friends -> Returns a list of friends of given user
Faites-vous un ami (lien plusieurs à plusieurs):
PUT /user/{id}/friend/{id} -> Befriends two users
DELETE /user/{id}/friend/{id} -> Unfriends two users
GET /user/{id}/friend/{id} -> Gets status of friendship between two users
Il n'y a jamais d'ambiguïté, et la dénomination plurielle ou singulière de la ressource est une indication pour l'utilisateur de ce à quoi il peut s'attendre (liste ou objet). Il n'y a pas de restrictions sur ids, ce qui permet théoriquement d'avoir un utilisateur avec l'id newsans chevaucher avec un nom de sous-ressource (futur potentiel).