我有一个名为Entity
的集合,每个实体都有一个名为groups的属性。
{
_id: xxx,
groups: [g1, g2, g3],
others...
}
一个实体最多只有几个小组。这些团体不会发生很大的变化,我也不会把它存放在不同的馆藏中。组数组对象如下所示:
g1 = {
group_id: xxx,
name: xxx
}
我也有一个User
集合。每个用户恰好属于1个实体和1个组。所以基本上我们有一个名为user.entity
和user.group
的属性,它引用了上面的1个实体文档。
当用户想要获取实体信息时,他可以GET /entity/123
。这很容易。实体组怎么样?可能的选择是
GET /entity/123/group
或GET /group
。
方法1很简单。您已经告诉人们您希望获得实体123
中的群组。因此,您可以设置中间件以将123
转换为req.entity
并直接返回entity.groups
。但对于管理员,他可能想查询所有实体中的所有组,这个API似乎不对?
方法2也没问题的原因是因为在我得到req.user
之后我可以检查req.user.entity
,查询实体123
并返回组。但我觉得我必须做额外的条件检查才能得到这些小组。此外,如果管理员想要查询所有组,我们将只需要查询不同的条件,查询条件可能会很乱/
那么这里更好的设计是什么?是否有一个比另一个更RESTful? (顺便说一下,1个用户只有1个组和1个实体,而user.entity
永远不会改变。)
答案 0 :(得分:1)
我正在开展一个类似的项目,我的解决方案是两种可能的选择的混合:
GET /group?entity_id=123
有了这个,我可以通过entity_id
直接访问群组,并在groups
丢失时返回所有entity_id
(例如,如果是管理员)。
此方法取决于您的groups
是否嵌套在entities
内,或者它们是独立的(即2个不同的entities
是否有2个不同的groups
具有相同的ID?)。
如果他们是独立的,你也可以这样做:
GET /group/456
通过它的id直接访问组。但是,如果您有两个具有相同ID的组,则无法使用此功能。在这种情况下,最好通过entity/:id/group