gpt4 book ai didi

clojure - 将 Datomic 实体身份暴露给服务或 REST API

转载 作者:行者123 更新时间:2023-12-01 00:42:02 24 4
gpt4 key购买 nike

我对如何向服务或 API 公开 Datomic 实体的身份感到困惑。

假设我有一个 REST API 端点

/api/post/<id>

哪里 <id>标识一些博客文章(博客文章实体)。

使用关系数据库后端,我可能有 <id>是存储在名为 id 的列中的某种串行整数类型在名为 post 的表中.

由于 Datomic 没有相同意义上的表(实体),而且它的实体 ID 在数据库范围内是唯一的,我想知道 Datomic 通常如何做到这一点?
  • 实体标识符 直接暴露?根据documentation实体标识符是数据库唯一的,因此可以使用。但是文档没有指定实体标识符的类型,所以可能没有。 (如果是 java.lang.Long 可以是负数吗?)
  • 或者应该是 UUID 或 鱿鱼属性 ( :post/id ) 会暴露吗?在同一文档的进一步下方,它说“为实体拥有一个全局唯一标识符通常很重要。如果域中尚不存在此类标识符,您可以使用值类型为 :db.type/uuid' 的唯一身份属性。是这样吗?一般是否需要添加:post/id之类的属性?所有这些实体?
  • 最佳答案

    除非端点是短暂的,否则您真的不应该公开实体编号(详细原因请参阅 here),因此使用身份属性的值是解决此问题的好方法。这个属性确实可以是 UUID 类型,但字符串或数字也可以工作。

    使用 Datomic,您还可以使用“自包含”标识符,例如 Datomic lookup refs ( [:post/id "fdslkjfdskjfsl"] 而不仅仅是 "fdslkjfdskjfsl" )。这有助于使您的路线不像帖子那样具体。由于 Datomic 的模式灵活性(与 SQL 表或 MongoDB 集合相比),这个好处特别容易实现。您可以实现这一点,例如通过对 URL 中的查找引用进行 edn 编码。

    关于clojure - 将 Datomic 实体身份暴露给服务或 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36959107/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com