In order to keep the code clean, I implemented most of the features of go-json-rest using the notion of http middleware. Basically, wrapping standard http.Handlers, and using a shared "env" data structure for communication between them. So far, I kept this mechanism private, but I'm thinking to make it public, and maybe offer a plugin interface based on that. In practice, the user will directly access http.Request instead of rest.Request (a subclass instance) and the methods provided by rest.Request will be moved to the new public Env object. This is just an idea for now, but this is why I was thinking about how to release breaking changes.