1
如何驗證Datomic實體ID是否有效?驗證Datomic實體ID是否有效
我正在使用Scala和Datomisca,但任何測試都應該可能也適用於Clojure和Datomic。
我的假設是一個有效的實體將擁有至少一個屬性使用
connection.database.entity(id).toMap.nonEmpty
考慮。
有沒有更好,更安全的方法來做到這一點?
如何驗證Datomic實體ID是否有效?驗證Datomic實體ID是否有效
我正在使用Scala和Datomisca,但任何測試都應該可能也適用於Clojure和Datomic。
我的假設是一個有效的實體將擁有至少一個屬性使用
connection.database.entity(id).toMap.nonEmpty
考慮。
有沒有更好,更安全的方法來做到這一點?
根據所Datomic文檔this section:
實體是不適合於存在測試,這應典型地經由一個唯一的標識的查詢被執行。
可能是更好的使用是這樣的(Clojure中):如果沒有相關的ID屬性
(d/q '[:find ?a
:in $ ?entid
:where [?entid ?a]]
db
id)
這將返回一個空集。你可以創建一個抽象此查詢謂詞功能:
(defn valid-id? [db id]
((comp not empty?) (d/q '[:find ?a
:in $ ?entid
:where [?entid ?a]]
db
id)))
我是用Clojure寫的例子很抱歉,但我不知道Datomisca。
其他評論(從團隊合併) - 你不應該結束手中的實體ID你不確定的狀態。造成這種情況的原因是: (1)實體對於面向外部的ID不理想--UUID,電子郵件等更好。請參閱:http://docs.datomic.com/identity.html (2)實體ID不保證跨數據庫保留。目前,這是一個實施細節,不屬於合同的一部分,數據庫在備份/恢復時保留實體ID。如果你必須重放一個數據庫的日誌到另一個數據庫,分片時它們將不會被保留。 – 2015-02-09 15:11:45
我們的應用程序不存儲實體ID在外部位置,但我們確實從REST調用返回它們。然後,瀏覽器可以在隨後的調用中包含ID,嵌入到URL中。我正在尋找一種方法來驗證嵌入式ID是否有效,並且未被瀏覽器JavaScript代碼錯誤地更改(「trust,but verify」)。 – Ralph 2015-11-12 13:54:22