chore: refactor gateway middlewares (#5042)

This commit is contained in:
Kevin Wan
2025-08-01 00:09:57 +08:00
committed by GitHub
parent b0b31f3993
commit 610a7345dc

View File

@@ -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