Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Mar 4, 2020. It is now read-only.

frozzare/go-httpapi

Repository files navigation

httpapi

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 (c) Fredrik Forsmo

About

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

Topics

Resources

Readme

License

MIT license

Code of conduct

Code of conduct

Contributing

Contributing

Security policy

Security policy

Stars

Watchers

Forks

Packages

Contributors

Languages