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



我只有 AngularJs client。他想使用 crud 架构使用每个API。例如:

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

这是他想用于我的模式的所有终点。(使用mongoDB数据库)。

我有用户 schema喜欢(简化):

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

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

我们需要添加/删除 itemsId来自 user.itemIds
客户端想要创建新的模式 userItems

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

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

我认为这种错误的方法使Mongo数据库正常化。

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

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

客户说,这两种方法很糟糕,他只知道他的SQL休息档案(一切都已归一化)。我怎么能证明他是错的?因为他对我说: Server to adapt to the client and not vice versa.

谢谢。

这是一篇关于RESTFUL API的好文章。

简而言之,您的恢复API应该:

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

例如:

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

最新更新