RESTful路线设计

时间:2016-03-08 14:11:10

标签: node.js rest express

我有一个名为Entity的集合,每个实体都有一个名为groups的属性。

{
  _id: xxx,
  groups: [g1, g2, g3],
  others...
}

一个实体最多只有几个小组。这些团体不会发生很大的变化,我也不会把它存放在不同的馆藏中。组数组对象如下所示:

g1 = {
  group_id: xxx,
  name: xxx
}

我也有一个User集合。每个用户恰好属于1个实体和1个组。所以基本上我们有一个名为user.entityuser.group的属性,它引用了上面的1个实体文档。

当用户想要获取实体信息时,他可以GET /entity/123。这很容易。实体组怎么样?可能的选择是

GET /entity/123/groupGET /group

方法1很简单。您已经告诉人们您希望获得实体123中的群组。因此,您可以设置中间件以将123转换为req.entity并直接返回entity.groups。但对于管理员,他可能想查询所有实体中的所有组,这个API似乎不对?

方法2也没问题的原因是因为在我得到req.user之后我可以检查req.user.entity,查询实体123并返回组。但我觉得我必须做额外的条件检查才能得到这些小组。此外,如果管理员想要查询所有组,我们将只需要查询不同的条件,查询条件可能会很乱/

那么这里更好的设计是什么?是否有一个比另一个更RESTful? (顺便说一下,1个用户只有1个组和1个实体,而user.entity永远不会改变。)

1 个答案:

答案 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

嵌套您的网址