Saya tidak suka melihat {id}
bagian dari URL tumpang tindih dengan sub-sumber daya, karena secara id
teoritis bisa menjadi apa saja dan akan ada ambiguitas. Ini menggabungkan konsep yang berbeda (pengidentifikasi dan nama sub-sumber daya).
Masalah serupa sering terlihat dalam enum
konstanta atau struktur folder, di mana konsep berbeda dicampur (misalnya, ketika Anda memiliki folder Tigers
, Lions
dan Cheetahs
, dan kemudian juga folder yang disebut Animals
pada tingkat yang sama - ini tidak masuk akal karena satu adalah subset dari lain).
Secara umum saya pikir bagian nama terakhir dari titik akhir harus tunggal jika berurusan dengan entitas tunggal pada suatu waktu, dan jamak jika berurusan dengan daftar entitas.
Jadi titik akhir yang berhubungan dengan satu pengguna:
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
Lalu ada sumber daya terpisah untuk melakukan kueri pada pengguna, yang umumnya mengembalikan daftar:
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
Dan di sini beberapa contoh sub-sumber daya yang berhubungan dengan pengguna tertentu:
GET /user/{id}/friends -> Returns a list of friends of given user
Buat teman (banyak ke banyak tautan):
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
Tidak pernah ada ambiguitas, dan penamaan jamak atau tunggal sumber daya adalah petunjuk kepada pengguna apa yang dapat mereka harapkan (daftar atau objek). Tidak ada batasan pada id
s, secara teoritis memungkinkan untuk memiliki pengguna dengan id new
tanpa tumpang tindih dengan nama sub-sumber daya (potensial masa depan).