Saya memiliki hierarki objek yang perlu saya ungkapkan melalui RESTful API dan saya tidak yakin bagaimana URL saya harus terstruktur dan apa yang harus dikembalikan. Saya tidak dapat menemukan praktik terbaik apa pun.
Katakanlah saya memiliki Anjing dan Kucing yang diwarisi dari Hewan. Saya perlu operasi CRUD pada anjing dan kucing; Saya juga ingin bisa melakukan operasi pada hewan secara umum.
Ide pertama saya adalah melakukan sesuatu seperti ini:
GET /animals # get all animals
POST /animals # create a dog or cat
GET /animals/123 # get animal 123
Masalahnya, koleksi / animals sekarang "tidak konsisten", karena koleksi dapat kembali dan mengambil objek yang tidak memiliki struktur yang persis sama (anjing dan kucing). Apakah dianggap "RESTful" memiliki koleksi yang menampilkan objek yang memiliki atribut berbeda?
Solusi lain adalah membuat URL untuk setiap jenis konkret, seperti ini:
GET /dogs # get all dogs
POST /dogs # create a dog
GET /dogs/123 # get dog 123
GET /cats # get all cats
POST /cats # create a cat
GET /cats/123 # get cat 123
Namun kini hubungan antara anjing dan kucing terputus. Jika seseorang ingin mengambil semua hewan, sumber daya anjing dan kucing harus dipertanyakan. Jumlah URL juga akan meningkat dengan setiap subtipe hewan baru.
Saran lain adalah menambah solusi kedua dengan menambahkan ini:
GET /animals # get common attributes of all animals
Dalam kasus ini, hewan yang dikembalikan hanya akan berisi atribut yang umum untuk semua hewan, menghilangkan atribut khusus anjing dan kucing. Ini memungkinkan untuk mengambil semua hewan, meskipun dengan detail yang lebih sedikit. Setiap objek yang dikembalikan dapat berisi tautan ke versi konkret yang mendetail.
Ada komentar atau saran?