Middleware
El middleware en Gin proporciona una forma de procesar solicitudes HTTP antes de que lleguen a los handlers de rutas. Una función middleware tiene la misma firma que un handler de ruta — gin.HandlerFunc — y típicamente llama a c.Next() para pasar el control al siguiente handler en la cadena.
Cómo funciona el middleware
Gin usa un modelo de cebolla para la ejecución del middleware. Cada middleware se ejecuta en dos fases:
- Pre-handler — el código antes de
c.Next()se ejecuta antes del handler de ruta. - Post-handler — el código después de
c.Next()se ejecuta después de que el handler de ruta retorna.
Esto significa que el middleware envuelve al handler como capas de una cebolla. El primer middleware adjunto es la capa más externa.
func Logger() gin.HandlerFunc { return func(c *gin.Context) { start := time.Now()
// Pre-handler phase c.Next()
// Post-handler phase latency := time.Since(start) log.Printf("Request took %v", latency) }}Adjuntar middleware
Hay tres formas de adjuntar middleware en Gin:
// 1. Global -- applies to all routesrouter := gin.New()router.Use(Logger(), Recovery())
// 2. Group -- applies to all routes in the groupv1 := router.Group("/v1")v1.Use(AuthRequired()){ v1.GET("/users", listUsers)}
// 3. Per-route -- applies to a single routerouter.GET("/benchmark", BenchmarkMiddleware(), benchHandler)El middleware adjunto en un alcance más amplio se ejecuta primero. En el ejemplo anterior, una solicitud a GET /v1/users ejecutaría Logger, luego Recovery, luego AuthRequired y finalmente listUsers.
En esta sección
- Usar middleware — Adjuntar middleware globalmente, a grupos o rutas individuales
- Middleware personalizado — Escribir tus propias funciones middleware
- Usar middleware BasicAuth — Autenticación HTTP básica
- Goroutines dentro del middleware — Ejecutar tareas en segundo plano de forma segura desde el middleware
- Configuración HTTP personalizada — Manejo de errores y recuperación en middleware
- Encabezados de seguridad — Establecer encabezados de seguridad comunes