Skip to content
This repository has been archived by the owner on Mar 4, 2020. It is now read-only.

Latest commit

 

History

History
96 lines (70 loc) · 2.94 KB

readme.md

File metadata and controls

96 lines (70 loc) · 2.94 KB

httpapi Build Status GoDoc Go Report Card

Use Fiber instead. This project will not be maintained any more.

A http router for building http apis in Go based on httprouter and alice.

The router works almost the same way as httprouter does with some changes:

  • Uppercase method functions is capitalized instead.
  • HandleFunc has two arguments instead of three (request and params).
  • All HandleFunc returns the data and/or a error that the response handle will handle.
  • HandleFunc2 has one argument instead of three (request).
  • HandleFunc3 has one argument instead of three (params).
  • HandleFunc4 has zero arguments instead of three.
  • Default response handler that response with JSON. Can be replaced by a custom handler function.
  • Not all methods exists on httpapi.Router struct as httprouter.Router has, e.g HandlerFunc does not exist.
  • Better support for middlewares with alice.
  • Default httprouter handle can also be used.

Installation

go get -u github.com/frozzare/go-httpapi

Usage

Example code:

router := httpapi.NewRouter()

router.Get("/hello/:name", func(r *http.Request, ps httpapi.Params) (interface{}, interface{}) {
    return map[string]string{
        "hello": ps.ByName("name"),
    }, nil
})

http.Handle("/", router)
http.ListenAndServe(":3000", nil)

Example response:

GET /hello/fredrik
{
    "hello": "fredrik"
}

To configure httprouter you just pass it as argument to NewRouter:

router := httpapi.NewRouter(&httprouter.Router{
    RedirectTrailingSlash: true,
})

To modify the response handle that takes in HandleFunc, HandleFunc2 and HandleFunc3 is wrapped with HandleFunc:

router := httpapi.NewRouter()

router.ResponseHandle = func(fn httpapi.HandleFunc) httpapi.Handle {
    return func(w http.ResponseWriter, r *http.Request, ps httpapi.Params) {
        data, out := fn(r, ps)

        // and so on...
    }
}

Both return values are returned as interfaces to support more than just than the error type.

Middlewares

router := httpapi.NewRouter()

// with standard http handler.
router.Use(func(h http.Handler) http.Handler {
    fmt.Println("Hello, world")
    return h
})

// with httprouter's handle.
router.Use(func(h httpapi.Handle) httpapi.Handle {
    fmt.Println("Hello, world")
    return h
})

License

MIT © Fredrik Forsmo