Cách cơ bản để suy nghĩ về chủ đề này như sau:
URI là một mã định danh tài nguyên xác định duy nhất một thể hiện cụ thể của TYPE tài nguyên. Giống như mọi thứ khác trong cuộc sống, mọi đối tượng (là một thể hiện của một số loại), có tập hợp các thuộc tính là bất biến theo thời gian hoặc tạm thời.
Trong ví dụ trên, một chiếc xe hơi là một vật thể rất hữu hình có các thuộc tính như make, model và VIN - không bao giờ thay đổi, và màu sắc, hệ thống treo, vv có thể thay đổi theo thời gian. Vì vậy, nếu chúng ta mã hóa URI bằng các thuộc tính có thể thay đổi theo thời gian (tạm thời), chúng ta có thể kết thúc với nhiều URI cho cùng một đối tượng:
GET /cars/honda/civic/coupe/{vin}/{color=red}
Và nhiều năm sau, nếu màu của chiếc xe này giống nhau được đổi thành màu đen:
GET /cars/honda/civic/coupe/{vin}/{color=black}
Lưu ý rằng bản thân ô tô (đối tượng) không thay đổi - đó chỉ là màu thay đổi. Có nhiều URI trỏ đến cùng một đối tượng sẽ buộc bạn phải tạo nhiều trình xử lý URI - đây không phải là một thiết kế hiệu quả và tất nhiên là không trực quan.
Do đó, URI chỉ nên bao gồm các phần sẽ không bao giờ thay đổi và sẽ tiếp tục xác định duy nhất tài nguyên đó trong suốt vòng đời của nó. Mọi thứ có thể thay đổi nên được dành riêng cho các tham số truy vấn, như vậy:
GET /cars/honda/civic/coupe/{vin}?color={black}
Dòng dưới cùng - nghĩ đa hình.