[DEPRECATED] Martini handler providing content negotiation to requests
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
LICENSE
README.md
negotiate.go

README.md

negotiate

Content negotiation middleware for Martini.

It's a simple wrapper to the negotiation library and martini-contrib/encoder service.

Status

This project is DEPRECATED and should NOT be used.

If someone magically appears and wants to maintain this project, I'll gladly give access to this repository.

Usage

Here is a ready to use example:

package main

import (
  "github.com/K-Phoen/negotiate"
  "github.com/go-martini/martini"
  "github.com/martini-contrib/encoder"
  "log"
  "net/http"
)

type Some struct {
  Login    string `json:"login"`
  Password string `json:"password" out:"false"`
}

func main() {
  m := martini.New()
  route := martini.NewRouter()

  // create a format -> encoder map
  negotiators := make(map[string]encoder.Encoder)
  negotiators["application/xml"] = encoder.XmlEncoder{}
  negotiators["application/json"] = encoder.JsonEncoder{}

  // use the middleware
  m.Use(negotiate.NegotiateFormat(negotiators))

  // and the right encoder will be automatically injected
  route.Get("/test", func(enc encoder.Encoder) (int, []byte) {
    result := &Some{"awesome", "hidden"}
    return http.StatusOK, encoder.Must(enc.Encode(result))
  })

  m.Action(route.Handle)

  log.Println("Waiting for connections...")

  if err := http.ListenAndServe(":8000", m); err != nil {
    log.Fatal(err)
  }
}

ToDo

  • provide tools to negotiate other things (language for instance)
  • write tests

License

This library is released under the MIT License. See the bundled LICENSE file for details.