私は、相互依存関係を持つリソース コレクションを定義する正しい方法について熟考してきました。
たとえば、URI を介して独立してアクセスできる「ドキュメント」と「コメント」を考えてみましょう。
/documents/{doc-uri}
/comments/{comment-id}
ただし、通常は、特定のドキュメントに関連するコメントのコレクションが必要です。これにより、これをどのように設計する必要があるかについて設計上の問題が生じます。
いくつかの主なオプションが表示されます。
1.) コメントのドキュメント uri の後にコレクション uri を指定します。
GET /documents/{doc-uri}/comments/
2.) コメント コレクションにパラメーターを指定して、ドキュメントごとに選択する
GET /comments/{comment-id}?related-doc={doc-uri}
3.) コンテンツ ネゴシエーションを使用して、関連するコメントが Accept ヘッダー経由で返されるように要求します。
// Get all the comments for a document
GET /documents/{doc-uri} Accept: application/vnd.comments+xml
// Create a new comment
POST /documents/{doc-uri} Content-Type: application/vnd.comment+xml <comment>...</comment>
方法 1 には、ドキュメントのコンテキストにコメントを自動的に配置できるという利点があります。これは、POST/PUT を使用してコメントを作成、更新、および削除するときにも便利です。ただし、ドキュメントのコンテキスト外のコメントへのグローバル アクセスは提供しません。したがって、システム内のすべてのコメントを検索したい場合は、方法 2 が必要になります。
方法 2 は #1 と同じ利点の多くを提供しますが、ドキュメントのコンテキストなしでコメントを作成しても意味がありません。コメントはドキュメントに明示的に関連付ける必要があるためです。
方法 3 は、GET および POST/create の観点からは興味深いものですが、更新と削除ではやや面倒です。
これらすべての方法の長所と短所を見ることができるので、以前にこの問題にアプローチして解決した可能性のある人からのガイダンスを探しています.
方法 1 と 2 の両方を実行することを検討しているため、必要なすべての機能を提供できますが、機能を過度に複雑化/複製しているのではないかと懸念しています。