我只有 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 /UserItem
,DEL /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/
。