REST API - 访问嵌入资源的最佳实践

时间:2015-10-21 01:10:10

标签: mongodb api rest embedded-resource

我们使用 MongoDB ,我们提供 restful api 来访问资源(不仅仅是集合)。 例如,我有一个设备集合。每个设备文档都有一个嵌入式阵列:运营商。这些是运营商的关联类,没有任何唯一ID

{
   _id: ObjectId("..."),
   carriers: [
     {
         carrier: ObjectId("..."),
         bindingInterval: {
           from: ISODate("..."),
           to: ISODate("...")
         }
     },
     ...
   ]
}

在我们的服务中,载体结合的唯一性由特定字段的组合决定:载体+从+到值。

问题: 要求这些嵌入式文档的最佳宁静做法是什么?在许多情况下,我单独GET / POST / PUT / DELETE

否则它只是一个例子。我们在许多其他情况下嵌入了文档。

思路:

  1. 我在主要资源的id。
  2. 下面的查询中单独描述了复合参数
  3. 我使用这些参数的混合来定义嵌入式文档的虚拟ID,我对类似的情况概括了这种方法。

1 个答案:

答案 0 :(得分:0)

据我了解,您需要以RESTful方式访问未分配任何ID的元素。

首先,我只为运营商添加一个单独的端点。它将是:

/devices/{deviceID}/carriers/

我不知道为什么不在mongo数据库级别上分配一个唯一的ID(这似乎是最简单的选项),但是如果不可能,最好通过路径中传递的人工复合密钥来引用给定资源而不是发送参数分别通过查询字符串。因此,每次返回载体集合时,都会为每个元素分配一个:

carrierID = md5(carrier+from+to)

使用这样的密钥,您可以通过以下方式轻松引用每个嵌入资源:

/devices/{deviceID}/carriers/{carrierID}/

似乎通过不同的端点来引用这些资源要容易得多。

缺点是你需要为后端的所有资源重新计算carrierID,以检查它们是否与收到的资源相匹配。

我发现每个运营商字段都有ObjectId。不是很独特吗?你为什么不用它?

相关问题