How To Create A Simple RESTful Service In Go
One of sweet spots of Golang is building RESTful services. Standard library package net/http provides all we need to build a simple one, and in this post we will see how easy it is.
For production code, I would highly recommend to have a look at gorilla/mux, which is widely adopted in the field. And if you need to build a RESTful service with context and middleware support, have a look at RESTful web service in Go using Goji.
A Hello World RESTful service
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/hello", hello)
http.ListenAndServe(":8080", nil)
}
func hello(w http.ResponseWriter, r *http.Request) {
name := r.FormValue("name")
if len(name) == 0 {
name = "Stranger"
}
fmt.Fprintf(w, "Hello, %v", name)
}
The code creates and runs a web service listening on port 8080.
GET http://localhost:8080/hello will return
Hello, Stranger
and GET http://localhost:8080/hello?name=Jack will result in
Hello, Jack
How it works
func main
Notice how easy it is to create and start a web server. We just need to: 1. Register function hello to handle requests for path /hello 1. Create and run a web server listening on a specified port
func hello
This function simply checks if parameter name is provided in url and if not, initializes it with value “Stranger”. Then it returns a greeting.
Bottom line
A RESTful service in Go could be as simple as handful of lines of code. Even though the example is deliberately simplified to show the essence, writing more complex RESTful service would not be significantly different.