intridea/grape — pull request #403 by politician (2013-05-10 01:49:00+00:00)
Title: add support for versioning using the 'Accept-Version' header

We'd like to be able to version our REST-like APIs using the Accept-Version header. This patch adds support and specs for the :accept_version_header strategy.

`curl -H "Accept-Version=v1" http://localhost:9292/api/toys`

Grape::Middleware::Versioner does not expose the ability to register a custom versioning strategy, and this patch does not attempt to create a registration mechanism. We simply use the existing `case` switcher to plug-in a new strategy.

Although the `Accept-Version` header is not a part of RFC 2616, various companies and frameworks follow the version header approach (e.g. http://mcavage.github.io/node-restify/). There are pros and cons to all of the currently popular versioning strategies (URI, Conneg, query strings), and the Accept-Version header is just one of many solutions to the various trade-offs.