From 8d3954359b61d5ffc8c5e59e0b3b97347227efa9 Mon Sep 17 00:00:00 2001 From: Sam Woodard Date: Sun, 19 Jul 2015 10:32:07 -0700 Subject: [PATCH] add show handler example --- examples/app.go | 54 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/examples/app.go b/examples/app.go index 5dc0e07..cbf6f04 100644 --- a/examples/app.go +++ b/examples/app.go @@ -5,9 +5,11 @@ import ( "encoding/json" "fmt" "io" + "io/ioutil" "net/http" "net/http/httptest" "regexp" + "strconv" "time" "github.com/shwoodard/jsonapi" @@ -21,7 +23,7 @@ func createBlog(w http.ResponseWriter, r *http.Request) { return } - // ...do stuff with your blog ... + // ...do stuff with your blog... w.WriteHeader(201) w.Header().Set("Content-Type", "application/vnd.api+json") @@ -32,8 +34,9 @@ func createBlog(w http.ResponseWriter, r *http.Request) { } func listBlogs(w http.ResponseWriter, r *http.Request) { - // ... fetch your blogs and filter, offset, limit, etc ... + // ...fetch your blogs, filter, offset, limit, etc... + // but, for now blogs := testBlogsForList() w.WriteHeader(200) @@ -43,15 +46,36 @@ func listBlogs(w http.ResponseWriter, r *http.Request) { } } +func showBlog(w http.ResponseWriter, r *http.Request) { + id := r.FormValue("id") + + // ...fetch your blog... + + intId, err := strconv.Atoi(id) + if err != nil { + http.Error(w, err.Error(), 500) + } + // but, for now + blog := testBlogForCreate(intId) + w.WriteHeader(200) + + w.Header().Set("Content-Type", "application/vnd.api+json") + if err := jsonapi.MarshalOnePayload(w, blog); err != nil { + http.Error(w, err.Error(), 500) + } +} + func main() { http.HandleFunc("/blogs", func(w http.ResponseWriter, r *http.Request) { if !regexp.MustCompile(`application/vnd\.api\+json`).Match([]byte(r.Header.Get("Accept"))) { - http.Error(w, "Not Acceptable", 406) + http.Error(w, "Unsupported Media Type", 415) return } if r.Method == "POST" { createBlog(w, r) + } else if r.FormValue("id") != "" { + showBlog(w, r) } else { listBlogs(w, r) } @@ -126,6 +150,7 @@ func testBlogsForList() []interface{} { } func exerciseHandler() { + // list req, _ := http.NewRequest("GET", "/blogs", nil) req.Header.Set("Accept", "application/vnd.api+json") @@ -134,13 +159,28 @@ func exerciseHandler() { http.DefaultServeMux.ServeHTTP(w, req) - buf := new(bytes.Buffer) - io.Copy(buf, w.Body) + jsonReply, _ := ioutil.ReadAll(w.Body) fmt.Println("============ jsonapi response from list ===========\n") - fmt.Println(buf.String()) + fmt.Println(string(jsonReply)) fmt.Println("============== end raw jsonapi from list =============") + // show + req, _ = http.NewRequest("GET", "/blogs?id=1", nil) + + req.Header.Set("Accept", "application/vnd.api+json") + + w = httptest.NewRecorder() + + http.DefaultServeMux.ServeHTTP(w, req) + + jsonReply, _ = ioutil.ReadAll(w.Body) + + fmt.Println("\n============ jsonapi response from show ===========\n") + fmt.Println(string(jsonReply)) + fmt.Println("============== end raw jsonapi from show =============") + + // create blog := testBlogForCreate(1) in := bytes.NewBuffer(nil) jsonapi.MarshalOnePayloadEmbedded(in, blog) @@ -153,7 +193,7 @@ func exerciseHandler() { http.DefaultServeMux.ServeHTTP(w, req) - buf = new(bytes.Buffer) + buf := bytes.NewBuffer(nil) io.Copy(buf, w.Body) fmt.Println("\n============ jsonapi response from create ===========\n")