私はサードパーティ製品用のAsp.Net Web APIを構築しており、APIとしてOData 4を使用することを検討しています。私はオブジェクトモデルでかなりの自由度を持っていますが、基礎となるデータモデルを変更することはできません。odata APIを作成するときに複雑な関係を処理する方法は?
odataはリレーションシップを定義するナビゲーションプロパティをサポートしていますが、オブジェクト間の直接リンクのように見えます。私が構築しているデータモデルの多くの場合、関係には独自の特性があります。たとえば、 'User'にはグループ、組織単位などとの 'Member Of'関係のコレクションがあり、 'Member Of'リンク自体には 'Is Default'ブール値プロパティがあります。場合によっては、リレーションシップに複数のプロパティがあります。
これを処理する最善の方法はありますか?プロパティを持つ 'メンバーシップ'エンティティを作成し、ナビゲーションプロパティを持つユーザ(ユーザ>メンバーシップ>グループ)から2つのホップを持つ必要がありますか?私は 'Membership'複合型を作成する必要があります、 'Membership'のコレクションである 'Memberships'プロパティを作成し、 'Membership'(もし可能なら)にNavigation Propertyを持っていますか?これらのオプションのいずれかを使用すると、便宜のためにグループのすべてのメンバーに読み取り専用のナビゲーションプロパティを追加する必要があります(ユーザー>グループ)。 RESTの観点から
おかげ
ありがとうアレクサンドル。私の質問は、ユーザーとグループの間のリンクがプロパティを持っているところですが、私はあなたの答えが解決しないと考えています。 – AndrewS
[Target Attributes](https://tools.ietf.org/html/rfc5988#section-5.4)に関するWeb Linkingの仕様を見ると、あなたは[extend](https:// tools。 ietf.org/html/rfc5988#section-6.3)をアプリケーション固有のデータで置き換えます。 –