この主題について考える基本的な方法は次のとおりです。
URIは、リソースTYPEの特定のインスタンスを一意に識別するリソース識別子です。人生の他のすべてと同様に、すべてのオブジェクト(あるタイプのインスタンス)には、時間不変または時間的である属性のセットがあります。
上記の例では、自動車は非常に具体的なオブジェクトであり、メーカー、モデル、VINなどの属性があり、変化することはありません。色、サスペンションなどは、時間とともに変化する可能性があります。したがって、時間の経過とともに変化する可能性のある(時間的な)属性を使用してURIをエンコードすると、同じオブジェクトに対して複数のURIが生成される可能性があります。
GET /cars/honda/civic/coupe/{vin}/{color=red}
そして数年後、この同じ車の色が黒に変更された場合:
GET /cars/honda/civic/coupe/{vin}/{color=black}
車のインスタンス自体(オブジェクト)は変更されていません。変更されたのは色だけです。同じオブジェクトインスタンスを指す複数のURIがあると、複数のURIハンドラーを作成する必要があります。これは効率的な設計ではなく、もちろん直感的ではありません。
したがって、URIは決して変更されず、存続期間を通じてそのリソースを一意に識別し続ける部分のみで構成する必要があります。変更される可能性があるものはすべて、クエリパラメータ用に予約する必要があります。
GET /cars/honda/civic/coupe/{vin}?color={black}
結論-ポリモーフィズムを考えてください。