Sunday, November 16, 2014

Routing for a Go Web Project

From a python programmer's perspective, these are lessons I've learned from developing a web app using Go.

After I've planned my project structure for my go app, I started to look into how I should go about developing the app itself. I read the detailed tutorial from the golang wiki wiki site. Although it seemed simple enough to build a web app, I immediately recognized some things I would miss from the python/django world. For example, I didn't want to have code in my view to parse and validate the URLs. I started to look around for a solution and came across Gorilla Toolkit, specifically the mux package. It provided functionality that I was more accustomed to when I was using Django.
In the case of capturing values from the URL or applying a regex to the URL, you would specify routes as:
r := mux.NewRouter()
r.HandleFunc("/products/{key}", ProductHandler)
r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler)
r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler)
In the ArticleHandler function, you can retreive the value of "category" or "id" by:
vars := mux.Vars(request)
category := vars["category"]
id := vars["id"]
You can also restrict access to a view handler by specifying the request to use a specific method:
r.Methods("GET", "POST")
or requiring the request to use specific headers:
r.Headers("X-Requested-With", "XMLHttpRequest")
You can view the mux documentation all the functionality available. In general, this package helps remove a lot of boilerplate code from the view functions and makes a Django developer feel more at home when building a go web app.

No comments:

Post a Comment