要するに、両方が優先されます。どちらも同じ「もの」を返す可能性がありますが、「コンテキスト」は異なります。
URL を見てみましょう。
/users
: 全てのユーザー
/users/1
: ユーザー #1
/users/1/images
: すべてのユーザー #1 の画像
/users/1/images/1
: ユーザー #1 の画像 #1
上記の URL はすべて「ユーザー」リソースを中心に展開しています。「すべてのユーザー」、「ユーザー」、「ユーザーの画像」などです。
/images
: すべての画像
/images/1
: 画像 #1
上記の URL はすべて「画像」リソースを中心に展開しています。「すべての画像」または「画像」です。
表面的には、その違いは比較的小さいように見えるかもしれませんが、API を構築する場合、その違いはデータの消費方法に大きな影響を与える可能性があります。
たとえば、ユーザー #1 のすべての画像のリストを取得したいとします。どちらが優先されますか?
/users/1/images
また
/images?where=user.id eq 1
最初の形式は私たちが望むものを正確に表しており、より制約があり、理解しやすいですが、クエリ機能が非常に役立つため、2 番目の形式もサポートすべきではないという意味ではありません。
では、関連付けられたユーザーと共に画像のリストを取得したい場合はどうでしょうか?
/users/???
また
/images?include=user
このシナリオでは、ユーザーではなく画像のリストを取得しようとしているため、最初の URL はあまり意味がありませんが、2 番目の URLは必要なものを正確に 表しています。
さて、セキュリティに関しては、理想的には消費者に完全に透過的な方法で行われるべきです. 消費者は「すべての画像が欲しい」と言うことができなければなりません。アクセスできるすべての画像のみを受け取ります。アクセス権のない特定のリソースにアクセスしようとすると、適切な HTTP エラー コードが返されます。