github.com/micro/go-micro/examples@v0.0.0-20210105173217-bf4ab679e18b/template/web/handler/handler.go (about)

     1  package handler
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"net/http"
     7  	"time"
     8  
     9  	example "github.com/micro/go-micro/examples/template/srv/proto/example"
    10  	"github.com/micro/go-micro/v2/client"
    11  )
    12  
    13  func ExampleCall(w http.ResponseWriter, r *http.Request) {
    14  	// decode the incoming request as json
    15  	var request map[string]interface{}
    16  	if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
    17  		http.Error(w, err.Error(), 500)
    18  		return
    19  	}
    20  
    21  	// call the backend service
    22  	exampleClient := example.NewExampleService("go.micro.srv.template", client.DefaultClient)
    23  	rsp, err := exampleClient.Call(context.TODO(), &example.Request{
    24  		Name: request["name"].(string),
    25  	})
    26  	if err != nil {
    27  		http.Error(w, err.Error(), 500)
    28  		return
    29  	}
    30  
    31  	// we want to augment the response
    32  	response := map[string]interface{}{
    33  		"msg": rsp.Msg,
    34  		"ref": time.Now().UnixNano(),
    35  	}
    36  
    37  	// encode and write the response as json
    38  	if err := json.NewEncoder(w).Encode(response); err != nil {
    39  		http.Error(w, err.Error(), 500)
    40  		return
    41  	}
    42  }