node.js と MongoDB を使用して RESTful Web アプリケーションを構築しています。
Person モデルがあります
Person
id: '12345'
name: 'John'
likes: [ {id: '54321', name: 'Mary'} ]
isLikeydBy: []
Person
id: '54321'
name: 'Mary'
likes: []
isLikeydBy: [ {id: '12345', name: 'John'} ]
「いいね」と「isLikedBy」の関係をモデル化する最良の方法は何ですか? 私は MongoDB を使用しているので、1 人の人物に関するすべてのデータを取得するために必要なデータベースへのアクセスは 1 回だけなので、これは関係をモデル化するための良い方法だと思いました。
この関係の REST API を作成するにはどうすればよいですか? 「ジョン」が「メアリー」をもう好きでなくなったらどうしますか。サーバーは次の put リクエストのみを受け取ります。
Person
id: '12345'
name: 'John'
likes: []
isLikeydBy: []
ただし、サーバーは「Mary」も更新する必要があります。これは、彼女が「John」に好かれなくなったためです。(MongoDB はトランザクションを直接サポートしておらず、自分で実装する必要があることを知っています。)
私のアイデア:
1. Person (「likes」および「isLikedBy」フィールド) が更新されるたびに、データベースからこの人物を取得し、「likes」および「isLikedBy」フィールドをリクエストと比較します。このアプローチにはいくらかのオーバーヘッドがあり、それが RESTful API の精神に沿っているかどうかもわかりません。
2.クライアントに、元の「likes」フィールドと「isLikedBy」フィールドの両方と、新しく更新されたフィールド (または差分のみ) を送信させます。クライアントは、どのデータが最後にサーバーに正常に保存されたかを認識しなければならないため、これは RESTful 設計とはかけ離れているように見えます。
3.関係情報を含む別のオブジェクトを作成します (3 つのフィールド: id、me、whoILike)。しかし、これは、個人に関するデータを取得するたびに、個人用と関係用の 2 つのクエリが必要になり、データを 1 つのオブジェクトに結合することを意味します。
私は何をすべきか?