Thin helper module for composing routers
This helper module is used for composing go-chi routers.
A Composer
is a struct with multiple servers and a chi mux.
type Composer struct {
servers []Server
Mux *chi.Mux
}
A Server
is an interface with methods to return a HTTP handler and a prefix.
type Server interface {
Mux() http.Handler
Prefix() string
}
Examples would be an User
server and a Product
server (structs that implements the Server
interface).
type UserServer struct {
mux *chi.Mux
prefix string
// server dependencies (db, logger, etc.)
}
userServer := &UserServer{
prefix: "/users",
Mux: chi.NewRouter(),
}
type ProductServer struct {
mux *chi.Mux
prefix string
// server dependencies (db, logger, etc.)
}
productServer := &ProductServer{
prefix: "/products",
Mux: chi.NewRouter(),
}
First, you create a Composer using the NewComposer
function passing all the middlewares you want in the root router.
composer := composer.NewComposer(
middleware.Recoverer,
middleware.CleanPath,
middleware.RedirectSlashes,
)
Internally, this will create a chi router with all the middlewares received and return a pointer to a Composer
struct.
Then, you call the Compose
method passing all the servers to the composer (the root router).
if err := composer.Compose(userServer, productServer); err != nil {
return err
}
Now, you can use the composer
as the HTTP handler.
http.ListenAndServe(":8080", composer)
Distributed under the GNU Lesser General Public License, version 2.1
. See LICENSE file for more information.