On 13 October 2015 at 09:49, Patrick Kristiansen <patr...@patrkris.dk> wrote: > > Has anyone read and given any thoughts to the ideas about immutability and > REST by Ted Dizuba here: > > http://teddziuba.github.io/2014/08/18/the-s-in-rest/ > > Has anyone done anything resembling this? I think the ideas sounds > intriguing. >
It's a reasonable start, but I don't think it goes far enough. Why make only small parts of a system immutable? Why tie the canonical identifier for an immutable value to a domain? I'd be inclined to model the entire system as a reference. So we have something that deferences it, producing an immutable snapshot at a certain point in time, and we have something that atomically updates it. For example, we could build a route that gives us an immutable snapshot of the system, identified by a cryptographic hash. We could also supply a hypertext reference in the response, which would function as a suggested source for the snapshot. GET https://api.example.com/ => {:id #sha1 "aaa", :href #url "https://api.example.com/aaa"} Once we have the snapshot, we can query it. The simplest way would be via a subpath: GET https://api.example.com/aaa/users => [{:id #sha1 "bbb", :name "Alice", :job-title "Cryptographer"}] But we could conceive of more complex queries as well, ones that would enable us to fetch multiple parts of the database simultaneously. For updating the data, we need a route that accepts some data that represents how the data is to be changed. So at its most basic, something like: POST https://api.example.com/ [[:set #sha1 "bbb" :job-title "Senior Cryptographer"]] Of course, the difficulty with this architecture is that few databases have fast, immutable snapshots built in, so you'd have to get a little creative with your database design. - James -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.