从REST更新mongodb文档的正确方法

时间:2016-11-23 16:43:48

标签: node.js mongodb rest database-design

我只有AngularJs client。他希望使用 CRUD 架构来使用每个API。例如:

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

这是他想要用于我的架构的所有端点。(使用MongoDB数据库)。

我有用户架构,如(简化):

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

和架构项目(不需要显示问题)。

我们需要从itemsId 添加/删除 user.itemIds 客户希望创建新架构 userItems

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

他希望从用户架构中删除user.itemIds并创建4个CRUD端点/ userItems。

我认为这是错误的方法,规范了mongo数据库。

但我不知道这两方面哪一个更好(客户和服务器) 1)创建2个端点POST /UserItemDEL /UserItem以更新user.itemIds中的项目。

2)使用现有API user.itemIds更新PUT /user,但客户端需要发送整个 itemsIds 数组来更新它(如果有很多这可能是不好的方法。

客户说这两种方法都很糟糕,他只知道他的SQL REST archictere(所有内容都已规范化)。我怎么能证明他,他错了?因为他对我说: Server to adapt to the client and not vice versa.

谢谢。

1 个答案:

答案 0 :(得分:0)

This是关于RESTful API的好文章。

简而言之,您的RESTful API应该:

  • 专注于资源
  • 有意义
  • 一致性

例如:

  • 当您想要向用户添加项目时:首先找到用户,而不是相反。因此,POST users/:userId/items/向用户添加新项目是好的。或者,DELETE users/:userId/items/:itemId从用户中删除项目。
  • 如果要查找具有此特定项目的所有用户:GET /items/:itemId/users/