Tôi không muốn thấy {id}
một phần của các URL trùng lặp với các tài nguyên phụ, vì id
về mặt lý thuyết có thể là bất cứ điều gì và sẽ có sự mơ hồ. Nó đang trộn các khái niệm khác nhau (định danh và tên tài nguyên phụ).
Vấn đề tương tự thường thấy trong enum
các hằng số cấu trúc thư mục hoặc các khái niệm khác nhau là hỗn hợp (ví dụ, khi bạn có thư mục Tigers
, Lions
và Cheetahs
, và sau đó còn là một thư mục có tên Animals
cùng cấp - điều này làm cho không có ý nghĩa là một là một tập hợp con của khác).
Nói chung, tôi nghĩ rằng phần được đặt tên cuối cùng của một điểm cuối nên là số ít nếu nó liên quan đến một thực thể duy nhất tại một thời điểm và số nhiều nếu nó liên quan đến một danh sách các thực thể.
Vì vậy, các điểm cuối liên quan đến một người dùng:
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
Sau đó, có tài nguyên riêng để thực hiện truy vấn trên người dùng, thường trả về một danh sách:
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
Và đây là một số ví dụ về tài nguyên phụ liên quan đến một người dùng cụ thể:
GET /user/{id}/friends -> Returns a list of friends of given user
Kết bạn (liên kết nhiều đến nhiều):
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
Không bao giờ có bất kỳ sự mơ hồ nào, và việc đặt tên số nhiều hoặc số ít của tài nguyên là một gợi ý cho người dùng những gì họ có thể mong đợi (danh sách hoặc đối tượng). Không có hạn chế nào đối với id
s, về mặt lý thuyết cho phép người dùng có id new
mà không bị trùng lặp với tên tài nguyên phụ (tương lai tiềm năng).