package api
import "net/http"
import "fmt"
func HandleRequest(w http.ResponseWriter, r *http.Request, pam map[string]string ) error {
fmt.Fprint(w, "Here is all req headers:\n")
//get the req Headers
for k, v := range r.Header {
for _, vv := range v {
fmt.Fprint(w, k+"=" + vv)
fmt.Fprint(w, "\n")
}
}
return nil
}
Get Request Query Parameter
package api
import "net/http"
import "fmt"
// three different methos to access query parameters
func HandleRequest(w http.ResponseWriter, r *http.Request, pam map[string]string ) error {
//r.FormValue to access the url query parameters
fmt.Fprint(w, "fileds=" + r.FormValue("fields") + "\n")
//r.URL.Query().Get() only get the 1st item of the query param
fmt.Fprint(w, "fields=" + r.URL.Query().Get("fields") + "\n")
//r.URL.Query()[] get array of all values of the query param
paramarray := r.URL.Query()["fields"]
for _, value := range paramarray {
fmt.Fprint(w, "fields="+value + "\n")
}
return nil
}
Get Path Parameter
package api
import "net/http"
import "fmt"
// the path will be : /xxxx/:user/:book/
func HandleRequest(w http.ResponseWriter, r *http.Request, pam map[string]string ) error {
fmt.Fprint(w, pam["user"])
fmt.Fprint(w, pam["book"])
return nil
}
Set Response Header
package api
import "net/http"
import "fmt"
func HandleRequest(w http.ResponseWriter, r *http.Request, pam map[string]string ) error {
// set or add headers
w.Header().Set("aa", "abcd")
w.Header().Add("bb", "cdef")
// use fmt.Fprint to write response body
fmt.Fprint(w, "Welcome!\n")
return nil
}
package api
import "net/http"
func HandleRequest(w http.ResponseWriter, r *http.Request, pam map[string]string ) error {
// use w.Wrtie to write response body
w.Write([]byte("hello, this is a test"))
return nil
}
Response Json body
package api
import "net/http"
import "encoding/json"
type MyDATA struct {
Aa string `json:"aa, omitempty"`
Bb int `json:"bb, omitempty"`
Cc bool `json:"cc, omitempty"`
}
func HandleRequest(w http.ResponseWriter, r *http.Request, pam map[string]string ) error {
var err error
var body []byte
mydata := MyDATA {
Aa: "hello world",
Bb: 100,
Cc: true,
}
if body, err = json.Marshal(mydata); err != nil {
return err
}
// content-type header
w.Header().Add("Content-Type", "application/json")
w.Write(body)
return nil
}
Get/Set State DB
package api
import "net/http"
import "fmt"
type MyCounter struct {
Count int `json:"count"`
}
func HandleRequest(w http.ResponseWriter, r *http.Request, pam map[string]string ) error {
var counter = &MyCounter{}
if err := State.Get("counter", &counter); err != nil {
counter = &MyCounter{Count:1}
} else {
counter.Count++
}
State.Save("counter", *counter)
fmt.Fprintf(w, "current counter:%d\n", counter.Count)
return nil
}