mirror of
https://github.com/go-kratos/kratos.git
synced 2025-02-03 13:11:42 +02:00
496edc6fb1
* refactor http handle
58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
package http
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
type HelloRequest struct {
|
|
Name string `json:"name"`
|
|
}
|
|
type HelloReply struct {
|
|
Message string `json:"message"`
|
|
}
|
|
type GreeterService struct {
|
|
}
|
|
|
|
func (s *GreeterService) SayHello(ctx context.Context, req *HelloRequest) (*HelloReply, error) {
|
|
return &HelloReply{Message: "hello " + req.Name}, nil
|
|
}
|
|
|
|
func newGreeterHandler(srv *GreeterService, opts ...HandleOption) http.Handler {
|
|
h := DefaultHandleOptions()
|
|
for _, o := range opts {
|
|
o(&h)
|
|
}
|
|
r := mux.NewRouter()
|
|
r.HandleFunc("/helloworld", func(w http.ResponseWriter, r *http.Request) {
|
|
var in HelloRequest
|
|
if err := h.Decode(r, &in); err != nil {
|
|
h.Error(w, r, err)
|
|
return
|
|
}
|
|
next := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
return srv.SayHello(ctx, &in)
|
|
}
|
|
if h.Middleware != nil {
|
|
next = h.Middleware(next)
|
|
}
|
|
out, err := next(r.Context(), &in)
|
|
if err != nil {
|
|
h.Error(w, r, err)
|
|
return
|
|
}
|
|
if err := h.Encode(w, r, out); err != nil {
|
|
h.Error(w, r, err)
|
|
}
|
|
}).Methods("POST")
|
|
return r
|
|
}
|
|
|
|
func TestHandler(t *testing.T) {
|
|
s := &GreeterService{}
|
|
_ = newGreeterHandler(s)
|
|
}
|