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.

Reply via email to