将 OrientDB ORecordId 映射到 RestFull 友好 ID 表示的最佳实践
Best practice to map OrientDB ORecordId onto RestFull friendly ID representation
我们正在研究 OrientDB 作为 restful Web 服务背后的持久性解决方案,因为 GraphDB 将完美匹配我们的用例。我们注意到的一件事是,实体(顶点和边)由 ORecordId 唯一标识,其中包含“#${clusterId}:${clusterPosition}”。在 restful API 中,根据我对关系数据库的个人经验,您通常有几种解决方案来唯一标识实体,例如:
- UUID,在代码中生成并保留在数据库级别
- Long/Int 值,在 DB 级别增量生成
- 等...
问题是格式“#${clusterId}:${clusterPosition}”并不真正URL/REST友好(示例:.../api/user/[#${clusterId} :${clusterPosition}]/地址)。关于如何处理此问题,您是否有任何 advice/experience,请记住您需要 ORecordId 和 "RestFulFriendlyId" 之间的双向映射?
任何基于经验的提示和最佳实践将不胜感激....
此致,
巴特
我们正在考虑使用 HashID。 http://hashids.org/
我们仍然存在一些小问题,但理论上,HashID 应该为您提供哈希 Rid,它也是可转换的,因此不会占用更多存储空间 space(与 UUID 一样) .这只需要一点点 CPU 时间。
请注意,这个小工具绝不是真正的散列,因为它很难破解散列。它更多的是关于良好的混淆。如果您完全担心 Rids 被人知道,那么这不是一个合适的解决方案。
斯科特
实际上,我会说 RID 非常 RESTful,如果您这样做:
.../domain.com/other-segments/{cluster}/{position}/...
由于簇是特定 class 的 "superset"(即一个 class 将具有一个或多个簇),这可以被认为是通过以下方式识别目标数据对象type/record。我不确定你使用的是什么后端,但是提取这两个 URL 段并将它们重新组合到 #x:y 应该是一个相当简单(并且可能大部分是自动的)任务。
我们正在研究 OrientDB 作为 restful Web 服务背后的持久性解决方案,因为 GraphDB 将完美匹配我们的用例。我们注意到的一件事是,实体(顶点和边)由 ORecordId 唯一标识,其中包含“#${clusterId}:${clusterPosition}”。在 restful API 中,根据我对关系数据库的个人经验,您通常有几种解决方案来唯一标识实体,例如:
- UUID,在代码中生成并保留在数据库级别
- Long/Int 值,在 DB 级别增量生成
- 等...
问题是格式“#${clusterId}:${clusterPosition}”并不真正URL/REST友好(示例:.../api/user/[#${clusterId} :${clusterPosition}]/地址)。关于如何处理此问题,您是否有任何 advice/experience,请记住您需要 ORecordId 和 "RestFulFriendlyId" 之间的双向映射?
任何基于经验的提示和最佳实践将不胜感激....
此致,
巴特
我们正在考虑使用 HashID。 http://hashids.org/
我们仍然存在一些小问题,但理论上,HashID 应该为您提供哈希 Rid,它也是可转换的,因此不会占用更多存储空间 space(与 UUID 一样) .这只需要一点点 CPU 时间。
请注意,这个小工具绝不是真正的散列,因为它很难破解散列。它更多的是关于良好的混淆。如果您完全担心 Rids 被人知道,那么这不是一个合适的解决方案。
斯科特
实际上,我会说 RID 非常 RESTful,如果您这样做:
.../domain.com/other-segments/{cluster}/{position}/...
由于簇是特定 class 的 "superset"(即一个 class 将具有一个或多个簇),这可以被认为是通过以下方式识别目标数据对象type/record。我不确定你使用的是什么后端,但是提取这两个 URL 段并将它们重新组合到 #x:y 应该是一个相当简单(并且可能大部分是自动的)任务。