2015-02-05 6 views
1

Как проверить, действителен ли идентификатор объекта Datomic?Проверка достоверности идентификатора объекта Datomic

Я использую Scala и Datomisca, но любой тест, вероятно, также применим к Clojure и Datomic.

Я рассматриваю с помощью

connection.database.entity(id).toMap.nonEmpty 

на предположении, что действующий субъект будет иметь по крайней мере один атрибут.

Есть ли лучший, более безопасный способ сделать это?

ответ

2

В соответствии с this section в Datomic документов:

Субъекты не пригоден для существования испытаний, которые, как правило, должны быть выполнены с помощью поиска уникальной идентичности.

, вероятно, лучше использовать что-то вроде этого (в Clojure):

(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.

+1

Дополнительные комментарии (объединенные от группы) - вы не должны в конечном итоге иметь идентификатор объекта, статус которого вы не уверены. Причинами этого являются: (1) Объекты не идеальны для внешних облицовок - UUID, электронные письма и т. Д. Лучше. См. Http://docs.datomic.com/identity.html (2) Идентификаторы объектов не гарантируются для сохранения в базах данных. В настоящее время это детализация, а не часть контракта, что базы данных сохраняют идентификаторы сущностей при резервном копировании/восстановлении. Если вам нужно переписать журнал одного db в другой, то при осколке они не будут сохранены. –

+0

Наше приложение не хранит идентификаторы сущностей во внешних местоположениях, но мы возвращаем их из вызовов REST. Затем браузер может включать идентификаторы в последующие вызовы, встроенные в URL-адреса. Я ищу способ проверить, что встроенный идентификатор действителен и не был ошибочно изменен кодом JavaScript браузера («доверять, но проверять»). – Ralph

Смежные вопросы