将 Datomic 实体身份公开给服务或 REST API
Exposing Datomic entity identities to a service or REST API
我对如何将 Datomic 实体的身份暴露给服务或 API 感到困惑。
假设我有一个 REST API 端点
/api/post/<id>
其中 <id>
标识某个博客 post(博客 post 实体)。
使用关系数据库后端,我可能 <id>
是某种串行整数类型,存储在名为 post
的 table 中的名为 id
的列中。
由于 Datomic 没有相同意义上的 tables(实体),而且它的实体 ID 在数据库范围内是唯一的,我想知道 Datomic 通常是如何做到的?
- 实体标识符是否应该直接公开?根据 documentation 实体标识符是数据库唯一的,因此可以使用。但是文档没有指定实体标识符的类型,所以可能不是。 (如果是
java.lang.Long
可以为负数吗?)
- 或者应该公开 UUID 或 squuid 属性 (
:post/id
)?在同一文档的更下方,它说“为一个实体拥有一个全球唯一的标识符通常很重要。如果域中不存在此类标识符,您可以使用值类型为 :db.type/uuid' 的唯一标识属性。是吗?是否通常需要为所有此类实体添加 :post/id
之类的属性?
除非端点是临时的,否则您真的不应该公开实体编号(请参阅 here 了解详细原因),因此使用身份属性的值是解决此问题的好方法。该属性确实可以是 UUID 类型,但字符串或数字也可以。
使用 Datomic,您还有机会使用 "self-contained" 标识符,例如 Datomic lookup refs([:post/id "fdslkjfdskjfsl"]
而不仅仅是 "fdslkjfdskjfsl"
)。这有助于使您的路线不像关于帖子那样具体。由于 Datomic 的模式灵活性(与说 SQL 表或 MongoDB 集合相比),这个好处特别容易实现。您可以通过对 URL.
中的查找引用进行 edn 编码来实现这一点
我对如何将 Datomic 实体的身份暴露给服务或 API 感到困惑。
假设我有一个 REST API 端点
/api/post/<id>
其中 <id>
标识某个博客 post(博客 post 实体)。
使用关系数据库后端,我可能 <id>
是某种串行整数类型,存储在名为 post
的 table 中的名为 id
的列中。
由于 Datomic 没有相同意义上的 tables(实体),而且它的实体 ID 在数据库范围内是唯一的,我想知道 Datomic 通常是如何做到的?
- 实体标识符是否应该直接公开?根据 documentation 实体标识符是数据库唯一的,因此可以使用。但是文档没有指定实体标识符的类型,所以可能不是。 (如果是
java.lang.Long
可以为负数吗?) - 或者应该公开 UUID 或 squuid 属性 (
:post/id
)?在同一文档的更下方,它说“为一个实体拥有一个全球唯一的标识符通常很重要。如果域中不存在此类标识符,您可以使用值类型为 :db.type/uuid' 的唯一标识属性。是吗?是否通常需要为所有此类实体添加:post/id
之类的属性?
除非端点是临时的,否则您真的不应该公开实体编号(请参阅 here 了解详细原因),因此使用身份属性的值是解决此问题的好方法。该属性确实可以是 UUID 类型,但字符串或数字也可以。
使用 Datomic,您还有机会使用 "self-contained" 标识符,例如 Datomic lookup refs([:post/id "fdslkjfdskjfsl"]
而不仅仅是 "fdslkjfdskjfsl"
)。这有助于使您的路线不像关于帖子那样具体。由于 Datomic 的模式灵活性(与说 SQL 表或 MongoDB 集合相比),这个好处特别容易实现。您可以通过对 URL.