RavenDB ID前缀和REST API

我目前正在努力处理一些琐碎的事情,也许是这样,但是我找不到合适的解决方案。

我的问题源于RavenDB默认ID结构。假设我们使用HiLo算法创建一个人,我们将获得第一个文档:

people/A-1

并且相关的收藏集“人物”现在有一位成员。

我的问题真的很简单:设计一个普通的RESTful方法来获得一个人:

GET people/:id

并使用示例文档ID对其进行调用,我的呼叫将变为:

GET people/people/A-1

显然,这是行不通的,因为斜杠字符是路由分隔符,但对于RavenDB,它也是实体ID的一部分。

我尝试使用其他分隔符(更改客户端代码上的约定),以便获得一个ID,people#A-1但RavenDB Studio无法识别该ID :如果我尝试通过其ID将两个文档“链接”在一起,则只有标准格式被识别。我也找不到在服务器级别上仅在客户端级别上在数据库上设置约定的方法。

这种解决方案也感觉像是一个肮脏的解决方法,我正在寻找正确的做事方式。

我知道我可以使用任意ID,例如不带任何前缀的电子邮件地址,但这对我要存储的所有类型的实体都不可行,自然键并不是在每种情况下都可以选择的。

因此,我要问的是比我在使用RavenDB方面更有经验的任何人。解决此问题的正确方法是什么?


翻翻过去那场雪
浏览 131回答 3
3回答

米脂

我没有在玩具项目之外使用ravendb,但是当我阅读ayendes的书时,我认为这将是一个问题。我看到三种可能的方法来避免这种情况:分配一个GUID作为ID,这样您的ID中就没有/了。这可以在创建文档时完成在每个控制器方法上用不太糟糕的东西替换“ /”,这很烦人并且容易出错。生成URL时,请转义ID部分。我认为我会使用#1。
打开App,查看更多内容
随时随地看视频慕课网APP