我正在使用 node.js 和 MongoDB 构建一个 RESTful Web 应用程序。
我有一个人模型
Person
id: '12345'
name: 'John'
likes: [ {id: '54321', name: 'Mary'} ]
isLikeydBy: []
Person
id: '54321'
name: 'Mary'
likes: []
isLikeydBy: [ {id: '12345', name: 'John'} ]
模拟“喜欢”和“isLikedBy”关系的最佳方式是什么?由于我使用的是 MongoDB,我认为这是对关系建模的好方法,因为只需一次访问数据库即可获取有关一个人的所有数据。
如何为这种关系创建一个 REST api?如果“约翰”不再喜欢“玛丽”怎么办。服务器只接收到下面的 put 请求。
Person
id: '12345'
name: 'John'
likes: []
isLikeydBy: []
但是服务器也应该更新“玛丽”,因为现在她不再被“约翰”喜欢了。(我知道 MongoDB 不直接支持事务,我必须自己实现它们。)
我的想法:
1.每次更新 Person(它的 'likes' 和 'isLikedBy' 字段)时,从数据库中获取此人并将他们的 'likes' 和 'isLikedBy' 字段与请求进行比较。这种方法有一些开销,而且我不知道它是否符合 RESTful API 的精神。
2.让客户端发送原始的 'likes' 和 'isLikedBy' 字段以及新更新的字段(或仅发送 diff)。这似乎与 RESTful 设计相去甚远,因为客户端现在必须知道哪些数据最后一次成功保存到服务器。
3.创建一个包含关系信息的单独对象(3 个字段:id、me、whoILike)。但这意味着每次我想要获取有关某人的数据时,我都需要 2 个查询,一个用于该人,一个用于关系,然后将数据组合成一个对象。
我应该怎么办?