Versioning
Violetear handle versions by using the Accept: application/vnd.*
header.
This means that the URL won’t change, therefore instead of specifying the version on the URL something like this:
https://acme.tld/api/v2/foo
It can always be:
https://acme.tld/api/foo
But based on the request Accept: application/vnd.* header the corresponding
version will be served:
https://acme.tld/api/foo
===>
GET /api/foo HTTP/1.1
Accept: application/vnd.acme.v2
Using the Fragment identifier #
To define what version to use, the # fragment identifier is used when
declaring the routes.
The versionHeader constant is set to:
application/vnd.
This means that when defining a version only the string after application/vnd. is required:
application/vnd.[version]
| Request Accept header | route version in violetear | 
|---|---|
| application/vnd.acme.v2 | #acme.v2 | 
| application/vnd.acme.v2+json | #acme.v2+json | 
| application/vnd.acme.v2.raw+json | #acme.v2.raw+json | 
Example:
package main
import (
	"fmt"
	"log"
	"net/http"
	"github.com/nbari/violetear"
)
func handleHello(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hi,  %s!", r.URL.Path[1:])
}
func handleHelloV2(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "version 2")
}
func main() {
	router := violetear.New()
	router.HandleFunc("/hello", handleHello, "GET, HEAD")
	router.HandleFunc("/hello#violetear.v2", handleHelloV2, "GET, HEAD, POST")
	log.Fatal(http.ListenAndServe(":8000", router))
}
In this example, there are 2 different handlers for the /hello/ request handleHello and handeHelloV2:
router.HandleFunc("/hello", handleHello, "GET, HEAD")
router.HandleFunc("/hello#violetear.v2", handleHelloV2, "GET, HEAD, POST")
To serve using the handleHelloV2, the request needs to contain the header:
Accept: application/vnd.violetear.v2
if not, will take as default the handler handleHello
Example of how to send the header using http or curl
Using the http client:
$ http 0:8000/hello "Accept: application/vnd.violetear.v2"
Using curl:
$ curl 0:8000/hello -H "Accept: application/vnd.violetear.v2"