【发布时间】:2015-10-21 22:12:26
【问题描述】:
我们使用 MongoDB 并提供 restful api 来访问资源(不仅仅是集合)。 例如,我有一个设备集合。每个设备文档都有一个嵌入式数组:运营商。这些是运营商的关联类,没有任何唯一 ID。
{
_id: ObjectId("..."),
carriers: [
{
carrier: ObjectId("..."),
bindingInterval: {
from: ISODate("..."),
to: ISODate("...")
}
},
...
]
}
在我们的服务中,载体绑定的唯一性由特定字段的复合决定:载体+从+到值。
问题: 要求这些嵌入式文档的最佳实践是什么?在许多情况下,我分别GET / POST / PUT / DELETE 。
否则这只是一个例子。我们在许多其他情况下嵌入了文档。
想法:
- 我在主资源的 id 下面分别描述查询中的复合参数。
- 我使用这些参数的 mixin 为嵌入式文档定义了一个虚拟 id,并将这种方法推广到类似情况。
【问题讨论】:
-
老实说,如果您需要通过 REST API 查询特定资源,最好的办法是为其分配一个唯一 ID。如果您只需要一个集合过滤,例如通过 from 范围,一些资源查询语言会很有用。
-
后一种情况已经准备好并完成了,正如您所写的那样具有令人满意的查询语言。在前一种情况下,我认为没有必要添加唯一 ID,因为指定的字段确保了唯一性。
-
完全同意,但是,引入的ID将使查询更容易。
-
因此我认为我创建了一个以某种方式混合参数的虚拟 ID,例如简单的连接或 md5,我不存储它,只是用于查询。我在restful tutorials中寻找这个案例,但我没有找到任何关于这个的东西,但是它必须这样做。还是我错了,我在端点结构的设计上犯了错误?为了安全起见,我希望 API 可以单独修改这些文档。这是一个糟糕的设计,我必须一次修改这些吗?我不知道...
标签: mongodb api rest embedded-resource