Quick Notes on Compojure
Compojure is a routing library for Ring, that allows for the web app to be more composable, or modular.
Compojure has the
defroutes, a macro that defines a var containing a single Ring handler (it takes a request map and returns a response map).
this handler dispatches to other Ring handlers via
routes. Compojure routes consist of both a Ring handler
and the patterns used to match an incoming request to the handler. These can be broken down into 4 main componenets.
- The HTTP method for which the Handler should be invoked.
- The URI pattern that matches against the request’s URI
- A binding form for the request/params and matched portions of the URI - these become local vars in the Handler
- The body of the handler
A route will either return a response or nil and the Ring handler contianed in the var defined by
will go through each route in order until it finds one that does not return nil.
;It's worth noting that the post-handler and new-user-handler functions below is not a true Ring handler ;since they do not take a request map as its argument. The implications of this are inconsequential it seems. ;Also worth note is the response helper function from the ring.util.response namespace (defroutes my-routes (HTTP-method URI-pattern binding-form handler-body) ( GET "/post/:id" [url id] (post-handler id)) ( POST "/users" [url] (new-user-handler url)) ( GET "/" [id] (response "hello world")))
Tomorrow, I’d like to dive in a bit into the ring-defaults library and middleware in general