将Datomic实体标识公开给服务或REST API

我很困惑如何将Datomic实体的身份暴露给服务或API。

假设我有一个REST API端点

/api/post/<id>

其中<id>标识一些博客帖子(博客帖子实体)。

与关系数据库后端可能我<id>是存储在列名为某些串行整数类型的id在一个表命名post

由于Datomic没有相同意义上的表(实体),并且其实体ID是唯一的数据库范围,我不知道Datomic通常如何实现这一点?

  • 实体标识符是否应该直接暴露? 根据文档,实体标识符是数据库唯一的,这样就可以工作。 但是文档没有指定实体标识符的类型,所以可能不是。 (如果它是一个java.lang.Long它可以是否定的?)
  • 还是应该暴露一个UUID或squuid属性:post/id )? 进一步在同一个文档中,它说'为一个实体提供一个全球唯一的标识符通常很重要。 如果域中不存在此类标识符,则可以使用值类型为:db.type / uuid'的唯一标识属性。 是吗? 通常是否需要为所有这些实体添加如下属性:post/id

  • 除非端点是短暂的,否则应该不公开实体编号(详细原因请参见此处),因此使用标识属性的值是一个很好的方法。 这个属性的确可以是UUID类型,但字符串或数字也可以工作。

    使用Datomic,您还可以使用“自包含”标识符,例如Datomic lookup refs( [:post/id "fdslkjfdskjfsl"]而不是"fdslkjfdskjfsl" )。 这很方便,使您的路线不像关于帖子那么具体。 由于Datomic的架构灵活性(与SQL表或MongoDB集合相比),这一优势特别容易实现。 你可以通过在URL中对查找ref进行edn编码来实现这一点。

    链接地址: http://www.djcxy.com/p/65267.html

    上一篇: Exposing Datomic entity identities to a service or REST API

    下一篇: Is it idiomatic to make a join entity?