I am using FastHttp to implemente Http in go. Most people are using Gorilla Mux, but I decided to try a different http implementation.
There are scenarios where a request should chained, I mean, we must execute previous actions before handling the request resolver itself. The most common case is evaluating Authorization before executing the business.
Having said that, lets imagine a scenario where we must have an endpoint that must be protected by an Auth middleware, check for token and if its valid you can execute the business otherwise you get a 401 http status.
First set up the router
router := fasthttprouter.New()
router.GET("/", GetProducts)
fasthttp.ListenAndServe(":5002", router.Handler)
The GetProducts is a function that simply respond with a product object. For example:
func GetProducts(ctx *fasthttp.RequestCtx) {
product := &productModel.Product{}
product.Id = "123890"
product.Name = "Shoes"
product.Price = 100.30
json.NewEncoder(ctx).Encode(response)
}
Now we are going to create our Auth Middleware
func Auth(requestHandler fasthttp.RequestHandler) fasthttp.RequestHandler {
return func(ctx *fasthttp.RequestCtx) {
token := string(ctx.Request.Header.Peek("Authorization"))
if token == "" {
return
} else {
requestHandler(ctx)
}
}
}
And now... we are going to wrap the GetProducts on router.Get method wit
router.GET("/", Auth(GetProducts))
So, if you get until here you may want to understand how it works.
-- add
Top comments (0)