To run:
> go main.go
> go main.go -port=1234 // custom port
Open browser at localhost:9000
post:
> curl localhost:9000 -d "[1, 2, 3]"
get
> curl localhost:9000
| /* | |
| * Sample API with GET and POST endpoint. | |
| * POST data is converted to string and saved in internal memory. | |
| * GET endpoint returns all strings in an array. | |
| */ | |
| package main | |
| import ( | |
| "encoding/json" | |
| "flag" | |
| "fmt" | |
| "io/ioutil" | |
| "log" | |
| "net/http" | |
| "time" | |
| ) | |
| var ( | |
| // flagPort is the open port the application listens on | |
| flagPort = flag.String("port", "9000", "Port to listen on") | |
| ) | |
| var results []string | |
| // GetHandler handles the index route | |
| func GetHandler(w http.ResponseWriter, r *http.Request) { | |
| jsonBody, err := json.Marshal(results) | |
| if err != nil { | |
| http.Error(w, "Error converting results to json", | |
| http.StatusInternalServerError) | |
| } | |
| w.Write(jsonBody) | |
| } | |
| // PostHandler converts post request body to string | |
| func PostHandler(w http.ResponseWriter, r *http.Request) { | |
| if r.Method == "POST" { | |
| body, err := ioutil.ReadAll(r.Body) | |
| if err != nil { | |
| http.Error(w, "Error reading request body", | |
| http.StatusInternalServerError) | |
| } | |
| results = append(results, string(body)) | |
| fmt.Fprint(w, "POST done") | |
| } else { | |
| http.Error(w, "Invalid request method", http.StatusMethodNotAllowed) | |
| } | |
| } | |
| func init() { | |
| log.SetFlags(log.Lmicroseconds | log.Lshortfile) | |
| flag.Parse() | |
| } | |
| func main() { | |
| results = append(results, time.Now().Format(time.RFC3339)) | |
| mux := http.NewServeMux() | |
| mux.HandleFunc("/", GetHandler) | |
| mux.HandleFunc("/post", PostHandler) | |
| log.Printf("listening on port %s", *flagPort) | |
| log.Fatal(http.ListenAndServe(":"+*flagPort, mux)) | |
| } |
To run:
> go main.go
> go main.go -port=1234 // custom port
Open browser at localhost:9000
post:
> curl localhost:9000 -d "[1, 2, 3]"
get
> curl localhost:9000