First of all, I think that you are unlikely to find a single shrinkwrapped solution to do all this in Clojure (except in the form of a Java library to be used through interop). What is becoming Clojure’s standard Web stack comprises a number of libraries which people mix and match in all sorts of ways (since they happily tend to be perfectly compatible).1
Here’s a list of some building blocks which you might find useful:
-
Ring — Clojure’s basic HTTP request handling library; all the other webby libraries (for writing routes &c.) that I know of are compatible with Ring. Ring is being actively developed, has a robust community, is very well-written and has a nice SPEC document detailing its design philosophy. This blog post provides a nice example of how it might be used (reacting to GitHub commits).
-
Sandbar — currently an authentication library, more types of functionality planned; under development.
-
Compojure — a mature and robust library which provides a nice DSL for writing routes to be used on top of Ring. This will give you the nice URL parameter handling.
-
Compojure-rest — “a library for building RESTful applications on top of Compojure”. Compojure-rest is, as far as I can tell, in its early stages of development; perhaps you might see this as an opportunity to influence its design. 🙂
-
For dealing with XML, there’s
clojure.contrib.lazy-xml(and the helper libraryclojure.contrib.zip-filter.xml) and Enlive (the built-inclojure.xmlnamespace is currently not very usable); these would be used in tandem (though for your purposes the former might suffice). -
For JSON, there a library in contrib and clojure-json (and I think there was at least one other lib I seem to be forgetting now…); pick the one you like best.
All of will be perfectly happy with a REPL-driven development style (see the accepted answer to this SO question for a Ring trick which is very much to the purpose here). I suppose the above collection of links does leave a few blind spots (in particular, the authentication story is still being ironed out, as far as I can tell), but hopefully it’s a good start.
1The only single-package solution for building webapps in Clojure that I know of is Conjure, inspired by Rails; unfortunately I have to admit that I don’t know much about it, so if you feel interested, follow the link and look around the sources, wiki &c.