将Datomic实体标识公开给服务或REST API
我很困惑如何将Datomic实体的身份暴露给服务或API。
假设我有一个REST API端点
/api/post/<id>
其中<id>
标识一些博客帖子(博客帖子实体)。
与关系数据库后端可能我<id>
是存储在列名为某些串行整数类型的id
在一个表命名post
。
由于Datomic没有相同意义上的表(实体),并且其实体ID是唯一的数据库范围,我不知道Datomic通常如何实现这一点?
java.lang.Long
它可以是否定的?) :post/id
)? 进一步在同一个文档中,它说'为一个实体提供一个全球唯一的标识符通常很重要。 如果域中不存在此类标识符,则可以使用值类型为:db.type / uuid'的唯一标识属性。 是吗? 通常是否需要为所有这些实体添加如下属性:post/id
? 除非端点是短暂的,否则应该不公开实体编号(详细原因请参见此处),因此使用标识属性的值是一个很好的方法。 这个属性的确可以是UUID类型,但字符串或数字也可以工作。
使用Datomic,您还可以使用“自包含”标识符,例如Datomic lookup refs( [:post/id "fdslkjfdskjfsl"]
而不是"fdslkjfdskjfsl"
)。 这很方便,使您的路线不像关于帖子那么具体。 由于Datomic的架构灵活性(与SQL表或MongoDB集合相比),这一优势特别容易实现。 你可以通过在URL中对查找ref进行edn编码来实现这一点。
上一篇: Exposing Datomic entity identities to a service or REST API