forked from Mirrors/jsonapi
136 lines
3.7 KiB
Go
136 lines
3.7 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"time"
|
|
|
|
"github.com/google/jsonapi"
|
|
)
|
|
|
|
func main() {
|
|
jsonapi.Instrumentation = func(r *jsonapi.Runtime, eventType jsonapi.Event, callGUID string, dur time.Duration) {
|
|
metricPrefix := r.Value("instrument").(string)
|
|
|
|
if eventType == jsonapi.UnmarshalStart {
|
|
fmt.Printf("%s: id, %s, started at %v\n", metricPrefix+".jsonapi_unmarshal_time", callGUID, time.Now())
|
|
}
|
|
|
|
if eventType == jsonapi.UnmarshalStop {
|
|
fmt.Printf("%s: id, %s, stopped at, %v , and took %v to unmarshal payload\n", metricPrefix+".jsonapi_unmarshal_time", callGUID, time.Now(), dur)
|
|
}
|
|
|
|
if eventType == jsonapi.MarshalStart {
|
|
fmt.Printf("%s: id, %s, started at %v\n", metricPrefix+".jsonapi_marshal_time", callGUID, time.Now())
|
|
}
|
|
|
|
if eventType == jsonapi.MarshalStop {
|
|
fmt.Printf("%s: id, %s, stopped at, %v , and took %v to marshal payload\n", metricPrefix+".jsonapi_marshal_time", callGUID, time.Now(), dur)
|
|
}
|
|
}
|
|
|
|
exampleHandler := &ExampleHandler{}
|
|
http.HandleFunc("/blogs", exampleHandler.ServeHTTP)
|
|
exerciseHandler()
|
|
}
|
|
|
|
func exerciseHandler() {
|
|
// list
|
|
req, _ := http.NewRequest(http.MethodGet, "/blogs", nil)
|
|
|
|
req.Header.Set("Accept", jsonapi.MediaType)
|
|
|
|
w := httptest.NewRecorder()
|
|
|
|
fmt.Println("============ start list ===========")
|
|
http.DefaultServeMux.ServeHTTP(w, req)
|
|
fmt.Println("============ stop list ===========")
|
|
|
|
jsonReply, _ := ioutil.ReadAll(w.Body)
|
|
|
|
fmt.Println("============ jsonapi response from list ===========")
|
|
fmt.Println(string(jsonReply))
|
|
fmt.Println("============== end raw jsonapi from list =============")
|
|
|
|
// show
|
|
req, _ = http.NewRequest(http.MethodGet, "/blogs?id=1", nil)
|
|
|
|
req.Header.Set("Accept", jsonapi.MediaType)
|
|
|
|
w = httptest.NewRecorder()
|
|
|
|
fmt.Println("============ start show ===========")
|
|
http.DefaultServeMux.ServeHTTP(w, req)
|
|
fmt.Println("============ stop show ===========")
|
|
|
|
jsonReply, _ = ioutil.ReadAll(w.Body)
|
|
|
|
fmt.Println("============ jsonapi response from show ===========")
|
|
fmt.Println(string(jsonReply))
|
|
fmt.Println("============== end raw jsonapi from show =============")
|
|
|
|
// create
|
|
blog := fixtureBlogCreate(1)
|
|
in := bytes.NewBuffer(nil)
|
|
jsonapi.MarshalOnePayloadEmbedded(in, blog)
|
|
|
|
req, _ = http.NewRequest(http.MethodPost, "/blogs", in)
|
|
|
|
req.Header.Set("Accept", jsonapi.MediaType)
|
|
|
|
w = httptest.NewRecorder()
|
|
|
|
fmt.Println("============ start create ===========")
|
|
http.DefaultServeMux.ServeHTTP(w, req)
|
|
fmt.Println("============ stop create ===========")
|
|
|
|
buf := bytes.NewBuffer(nil)
|
|
io.Copy(buf, w.Body)
|
|
|
|
fmt.Println("============ jsonapi response from create ===========")
|
|
fmt.Println(buf.String())
|
|
fmt.Println("============== end raw jsonapi response =============")
|
|
|
|
// echo
|
|
blogs := []interface{}{
|
|
fixtureBlogCreate(1),
|
|
fixtureBlogCreate(2),
|
|
fixtureBlogCreate(3),
|
|
}
|
|
in = bytes.NewBuffer(nil)
|
|
jsonapi.MarshalManyPayload(in, blogs)
|
|
|
|
req, _ = http.NewRequest(http.MethodPut, "/blogs", in)
|
|
|
|
req.Header.Set("Accept", jsonapi.MediaType)
|
|
|
|
w = httptest.NewRecorder()
|
|
|
|
fmt.Println("============ start echo ===========")
|
|
http.DefaultServeMux.ServeHTTP(w, req)
|
|
fmt.Println("============ stop echo ===========")
|
|
|
|
buf = bytes.NewBuffer(nil)
|
|
io.Copy(buf, w.Body)
|
|
|
|
fmt.Println("============ jsonapi response from create ===========")
|
|
fmt.Println(buf.String())
|
|
fmt.Println("============== end raw jsonapi response =============")
|
|
|
|
responseBlog := new(Blog)
|
|
|
|
jsonapi.UnmarshalPayload(buf, responseBlog)
|
|
|
|
out := bytes.NewBuffer(nil)
|
|
json.NewEncoder(out).Encode(responseBlog)
|
|
|
|
fmt.Println("================ Viola! Converted back our Blog struct =================")
|
|
fmt.Println(string(out.Bytes()))
|
|
fmt.Println("================ end marshal materialized Blog struct =================")
|
|
}
|