Cara mendasar untuk memikirkan hal ini adalah sebagai berikut:
URI adalah pengidentifikasi sumber daya yang secara unik mengidentifikasi contoh spesifik dari TIPE sumber daya. Seperti semua hal lain dalam hidup, setiap objek (yang merupakan turunan dari beberapa jenis), memiliki serangkaian atribut yang entah waktu-invarian atau temporal.
Dalam contoh di atas, mobil adalah objek yang sangat nyata yang memiliki atribut seperti make, model, dan VIN - yang tidak pernah berubah, dan warna, suspensi, dll. Yang mungkin berubah seiring waktu. Jadi jika kita menyandikan URI dengan atribut yang dapat berubah dari waktu ke waktu (temporal), kita mungkin berakhir dengan beberapa URI untuk objek yang sama:
GET /cars/honda/civic/coupe/{vin}/{color=red}
Dan bertahun-tahun kemudian, jika warna mobil yang sama ini diubah menjadi hitam:
GET /cars/honda/civic/coupe/{vin}/{color=black}
Perhatikan bahwa instance mobil itu sendiri (objek) tidak berubah - itu hanya warna yang berubah. Memiliki beberapa URI yang menunjuk ke instance objek yang sama akan memaksa Anda untuk membuat beberapa penangan URI - ini bukan desain yang efisien, dan tentu saja tidak intuitif.
Karena itu, URI hanya boleh terdiri dari bagian-bagian yang tidak akan pernah berubah dan akan terus mengidentifikasi sumber daya tersebut secara unik sepanjang masa pakainya. Segala sesuatu yang dapat berubah harus disediakan untuk parameter kueri, seperti:
GET /cars/honda/civic/coupe/{vin}?color={black}
Intinya - pikirkan polimorfisme.