📊 Capítulo 04: Middlewares Customizados no Gin
Especialização Backend com Go & Gin Gonic
🗺️ O Modelo Onion (Cebola) e o Controle de Fluxo dos Middlewares
sequenceDiagram
autonumber
actor C as Cliente HTTP
participant M as Custom Middleware (Logger / Auth)
participant H as Handler Principal
C->>M: 1. Requisição HTTP Chega (Pré-Processamento)
M->>M: Inicia cronômetro / Injeta Correlation ID no Contexto
M->>H: 2. c.Next() (Transfere controle para o próximo da cadeia)
H->>H: 3. Executa regra de negócio e monta resposta JSON
H-->>M: 4. Retorna para o Middleware (Pós-Processamento)
M->>M: Calcula latência (t2 - t1) / Log estruturado
M-->>C: 5. Envia HTTP Response com cabeçalhos adicionais
🎯 Slide 1: A Assinatura de um Middleware no Gin
func TempoProcessamentoMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
inicio := time.Now()
c.Next() // Executa o handler principal
duracao := time.Since(inicio)
c.Header("X-Response-Time", duracao.String())
}
}
🎯 Slide 2: Interrupção Imediata com c.AbortWithStatusJSON
-
Regra Fundamental: Usar apenas
returndentro de um middleware NÃO interrompe a cadeia! - Abort Obrigatório: Você DEVE chamar
c.Abort()ouc.AbortWithStatusJSON(http.StatusUnauthorized, ...)para impedir que a requisição chegue ao handler desprotegido.
🎯 Slide 3: Compartilhando Dados com c.Set() e c.Get()
-
c.Set("usuario_id", 42): Injeta dados no contexto da requisição. id, exists := c.Get("usuario_id"): Recupera os dados no Controller com segurança de tipos.
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim