No me gusta ver que la {id}
parte de las URL se superponga con los recursos secundarios, ya id
que en teoría podría ser cualquier cosa y habría ambigüedad. Está mezclando diferentes conceptos (identificadores y nombres de sub-recursos).
Cuestiones similares se ve a menudo en enum
las constantes o carpeta estructuras, donde los diferentes conceptos se mezclan (por ejemplo, cuando se tiene carpetas Tigers
, Lions
y Cheetahs
, y luego también una carpeta llamada Animals
al mismo nivel - esto no tiene sentido que uno es un subconjunto de la otro).
En general, creo que la última parte nombrada de un punto final debería ser singular si se trata de una sola entidad a la vez, y plural si se trata de una lista de entidades.
Entonces, los puntos finales que tratan con un solo usuario:
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
Luego hay un recurso separado para hacer consultas a los usuarios, que generalmente devuelven una lista:
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
Y aquí algunos ejemplos de un sub-recurso que trata con un usuario específico:
GET /user/{id}/friends -> Returns a list of friends of given user
Hacer un amigo (enlace de muchos a muchos):
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
Nunca hay ambigüedad, y la denominación plural o singular del recurso es una pista para el usuario de lo que puede esperar (lista u objeto). No hay restricciones en id
s, lo que teóricamente hace posible tener un usuario con la identificación new
sin superponerse con un (posible futuro) nombre de sub-recurso.