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)