瀏覽代碼

feat: export gateway.Server to let users add middlewares (#2157)

Kevin Wan 2 年之前
父節點
當前提交
453fa309b1
共有 3 個文件被更改,包括 17 次插入17 次删除
  1. 1 0
      gateway/config.go
  2. 11 12
      gateway/requestparser.go
  3. 5 5
      gateway/server.go

+ 1 - 0
gateway/config.go

@@ -24,6 +24,7 @@ type (
 		// Rpc is the gRPC rpc method, with format of package.service/method
 		Rpc string
 	}
+
 	// upstream is the configuration for upstream.
 	upstream struct {
 		// Grpc is the target of upstream.

+ 11 - 12
gateway/requestparser.go

@@ -10,6 +10,15 @@ import (
 	"github.com/zeromicro/go-zero/rest/pathvar"
 )
 
+func buildJsonRequestParser(v interface{}, resolver jsonpb.AnyResolver) (grpcurl.RequestParser, error) {
+	var buf bytes.Buffer
+	if err := json.NewEncoder(&buf).Encode(v); err != nil {
+		return nil, err
+	}
+
+	return grpcurl.NewJSONRequestParser(&buf, resolver), nil
+}
+
 func newRequestParser(r *http.Request, resolver jsonpb.AnyResolver) (grpcurl.RequestParser, error) {
 	vars := pathvar.Vars(r)
 	if len(vars) == 0 {
@@ -17,12 +26,7 @@ func newRequestParser(r *http.Request, resolver jsonpb.AnyResolver) (grpcurl.Req
 	}
 
 	if r.ContentLength == 0 {
-		var buf bytes.Buffer
-		if err := json.NewEncoder(&buf).Encode(vars); err != nil {
-			return nil, err
-		}
-
-		return grpcurl.NewJSONRequestParser(&buf, resolver), nil
+		return buildJsonRequestParser(vars, resolver)
 	}
 
 	m := make(map[string]interface{})
@@ -34,10 +38,5 @@ func newRequestParser(r *http.Request, resolver jsonpb.AnyResolver) (grpcurl.Req
 		m[k] = v
 	}
 
-	var buf bytes.Buffer
-	if err := json.NewEncoder(&buf).Encode(m); err != nil {
-		return nil, err
-	}
-
-	return grpcurl.NewJSONRequestParser(&buf, resolver), nil
+	return buildJsonRequestParser(m, resolver)
 }

+ 5 - 5
gateway/server.go

@@ -19,7 +19,7 @@ import (
 
 // Server is a gateway server.
 type Server struct {
-	svr       *rest.Server
+	*rest.Server
 	upstreams []upstream
 	timeout   time.Duration
 }
@@ -27,7 +27,7 @@ type Server struct {
 // MustNewServer creates a new gateway server.
 func MustNewServer(c GatewayConf) *Server {
 	return &Server{
-		svr:       rest.MustNewServer(c.RestConf),
+		Server:    rest.MustNewServer(c.RestConf),
 		upstreams: c.Upstreams,
 		timeout:   c.Timeout,
 	}
@@ -36,12 +36,12 @@ func MustNewServer(c GatewayConf) *Server {
 // Start starts the gateway server.
 func (s *Server) Start() {
 	logx.Must(s.build())
-	s.svr.Start()
+	s.Server.Start()
 }
 
 // Stop stops the gateway server.
 func (s *Server) Stop() {
-	s.svr.Stop()
+	s.Server.Stop()
 }
 
 func (s *Server) build() error {
@@ -69,7 +69,7 @@ func (s *Server) build() error {
 	}, func(pipe <-chan interface{}, cancel func(error)) {
 		for item := range pipe {
 			route := item.(rest.Route)
-			s.svr.AddRoute(route)
+			s.Server.AddRoute(route)
 		}
 	})
 }