2016-11-23 6 views
0

AngularJs clientがあります。彼はCRUDアーキテクチャを使用してすべてのAPIを使用したいと考えています。例:RESTからmongodbドキュメントを適切に更新する方法

GET /user 
GET /user/:id 
POST /user 
PUT /user/:id 
DEL /user/:id 

これは私のスキーマ(MongoDBデータベースを使用)に使用するすべてのエンドポイントです。

{ 
    id : ObjectId("..."), 
    name: "Foo fooer", 
    itemIds : [ 
     ObjectId("..."), 
     ObjectId("..."), 
     ObjectId("...") 
    ] 
} 

とスキーマアイテム(質問のために表示する必要はありません):

は、私は(簡体字)のようなユーザースキーマを持っています。

必要があります追加/削除itemsIduser.itemIdsからです。
クライアントが新しいスキーマにuserItems作りたい:

{ 
    id : ObjectId("..."), 
    userId : ObjectId("..."), 
    itemID : ObjectId("...") 
} 

をし、彼は、ユーザーのスキーマからuser.itemIdsを削除し、4 CRUDエンドポイント/ userItemsを作成したいです。

私はこの誤ったアプローチで、mongoデータベースを正規化していると思います。

しかし、どちらがどちらの方が良いかわかりません(クライアントとサーバー)。
1)user.itemIdsの項目を更新する2つのエンドポイントPOST /UserItem,DEL /UserItemを作成します。多くが存在する場合、これはおそらく悪いアプローチである(

2)は、既存のAPI PUT /userを使用してuser.itemIdsを更新しますが、クライアントはそれを更新するためにitemsIdsの配列全体を送信する必要がある。

クライアントは、これらの2つのアプローチが悪いと言います、 。?彼が間違っていることを、彼はこの私に言ったので、彼が唯一の(すべてが規格化されている)彼のSQL REST archictereを知ってどのように私は、彼を証明することができます。 Server to adapt to the client and not vice versa.

ありがとう

答えて

0

Thisは、RESTful APIに関する優れた記事です。簡単に、あなたのRESTfulなAPIで

必要があります。たとえば、リソース

  • メイクセンス
  • 一貫
    • フォーカス:

      • 追加しますユーザにアイテムを提供する:ユーザを最初に見つけ出す。まあまあ。だから、POST users/:userId/items/新しいアイテムをユーザーに追加するのは良いです。または、DELETE users/:userId/items/:itemIdを使用してユーザーからアイテムを削除します。
      • この特定のアイテムを持っているすべてのユーザーを検索する場合:GET /items/:itemId/users/
    関連する問題