From 610a7345dca3a44030bc9704d4e99fedde88dfb9 Mon Sep 17 00:00:00 2001 From: Kevin Wan Date: Fri, 1 Aug 2025 00:09:57 +0800 Subject: [PATCH] chore: refactor gateway middlewares (#5042) --- gateway/server.go | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/gateway/server.go b/gateway/server.go index aea4f2f9e..cc6f3db7b 100644 --- a/gateway/server.go +++ b/gateway/server.go @@ -27,17 +27,14 @@ import ( const defaultHttpScheme = "http" type ( - // MiddlewareFunc defines the function signature for middleware. - MiddlewareFunc func(next http.HandlerFunc) http.HandlerFunc - // Server is a gateway server. Server struct { *rest.Server upstreams []Upstream conns []zrpc.Client processHeader func(http.Header) []string - middlewares []MiddlewareFunc dialer func(conf zrpc.RpcClientConf) zrpc.Client + middlewares []rest.Middleware } // Option defines the method to customize Server. @@ -107,6 +104,13 @@ func (s *Server) build() error { }) } +func (s *Server) buildChainHandler(handler http.HandlerFunc) http.HandlerFunc { + for i := len(s.middlewares) - 1; i >= 0; i-- { + handler = s.middlewares[i](handler) + } + return handler +} + func (s *Server) buildGrpcHandler(source grpcurl.DescriptorSource, resolver jsonpb.AnyResolver, cli zrpc.Client, rpcPath string) func(http.ResponseWriter, *http.Request) { handler := func(w http.ResponseWriter, r *http.Request) { @@ -273,19 +277,12 @@ func WithHeaderProcessor(processHeader func(http.Header) []string) func(*Server) // WithMiddleware adds one or more middleware functions to process HTTP requests. // Multiple middlewares will be executed in the order they were passed (like an onion model). -func WithMiddleware(middlewares ...MiddlewareFunc) func(*Server) { +func WithMiddleware(middlewares ...rest.Middleware) func(*Server) { return func(s *Server) { s.middlewares = append(s.middlewares, middlewares...) } } -func (s *Server) buildChainHandler(handler http.HandlerFunc) http.HandlerFunc { - for i := len(s.middlewares) - 1; i >= 0; i-- { - handler = s.middlewares[i](handler) - } - return handler -} - func buildRequestWithNewTarget(r *http.Request, target *HttpClientConf) (*http.Request, error) { u := *r.URL u.Host = target.Target