Ich mag es nicht, wenn sich der {id}
Teil der URLs mit Unterressourcen überschneidet, da id
dies theoretisch alles sein könnte und es Unklarheiten geben würde. Es werden verschiedene Konzepte (Bezeichner und Unterressourcennamen) gemischt.
Ähnliche Probleme werden oft in zu sehen enum
Konstanten oder Ordnerstrukturen, in denen unterschiedliche Konzepte gemischt sind (zum Beispiel, wenn Sie Ordner haben Tigers
, Lions
und Cheetahs
, und dann auch ein Ordner mit dem Namen Animals
auf dem gleichen Niveau - das macht keinen Sinn , da man eine Teilmenge die ist andere).
Im Allgemeinen denke ich, dass der zuletzt genannte Teil eines Endpunkts singulär sein sollte, wenn er sich jeweils mit einer einzelnen Entität befasst, und plural, wenn er sich mit einer Liste von Entitäten befasst.
Endpunkte, die sich mit einem einzelnen Benutzer befassen:
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
Dann gibt es eine separate Ressource für die Abfrage von Benutzern, die im Allgemeinen eine Liste zurückgeben:
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
Und hier einige Beispiele für eine Unterressource, die sich mit einem bestimmten Benutzer befasst:
GET /user/{id}/friends -> Returns a list of friends of given user
Machen Sie einen Freund (viele zu viele Link):
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
Es gibt niemals Mehrdeutigkeiten, und die Plural- oder Singularbenennung der Ressource ist ein Hinweis für den Benutzer, was er erwarten kann (Liste oder Objekt). Es gibt keine Einschränkungen für id
s, die es theoretisch ermöglichen, einen Benutzer mit der ID zu haben, new
ohne sich mit einem (potenziellen zukünftigen) Subressourcennamen zu überschneiden.