--- name: http_middleware_chain kind: function lang: go domain: infra version: "1.0.0" purity: pure signature: "func HTTPMiddlewareChain(middlewares ...Middleware) Middleware" description: "Compone N middlewares en uno solo. El primer middleware de la lista es el mas externo (se ejecuta primero en el request y ultimo en el response)." tags: [http, middleware, chain, compose, server, infra] uses_functions: [] uses_types: [Middleware_go_infra] returns: [Middleware_go_infra] returns_optional: false error_type: "" imports: [net/http] params: - name: middlewares desc: "lista variadic de middlewares a componer, aplicados de izquierda a derecha (el primero es el mas externo)" output: "un Middleware unico que aplica todos los middlewares en orden" tested: true tests: ["sin middlewares pasa al handler final", "un middleware se aplica correctamente", "dos middlewares se aplican en orden izquierda-derecha"] test_file_path: "functions/infra/http_middleware_chain_test.go" file_path: "functions/infra/http_middleware_chain.go" --- ## Ejemplo ```go chain := HTTPMiddlewareChain( HTTPLoggerMiddleware(os.Stderr), HTTPCORSMiddleware([]string{"*"}, []string{"GET", "POST"}), ) handler := chain(myHandler) http.ListenAndServe(":8080", handler) ``` ## Notas Funcion pura — solo combina funciones, sin I/O ni estado. La composicion es de derecha a izquierda internamente para que el primer middleware quede en la capa mas externa. Con cero middlewares retorna un Middleware identidad que no modifica el handler.