Gin中間件的分類
Gin中間件可以分為全局中間件和局部中間件。全局中間件是指對每個請求都會執行的中間件,而局部中間件則只對特定路由或路由組生效。
全局中間件
全局中間件可以通過以下方式進行注冊:
1 |
goCopy Coder := gin.Default() |
上邊的代碼注冊了兩個全局中間件:Logger和Recovery。Logger打印了每個請求的HTTP方法、URL和響應狀態碼,而Recovery則在出現panic時恢復程序并返回500錯誤響應。這兩個中間件均被廣泛應用于生產環境中。
局部中間件
局部中間件可以通過以下方式進行注冊:
1 |
goCopy Codeauth := r.Group("/auth", AuthMiddleware()) |
上邊的代碼創建了一個/auth路由組,并將AuthMiddleware中間件應用于該路由組,然后注冊了兩個路由:/login和/logout。只有經過AuthMiddleware中間件驗證的請求才能訪問這兩個路由。
實現自定義中間件
Gin提供了一種簡便的方式來編寫自定義中間件,只需要編寫一個函數,接受*gin.Context作為參數,并在其內部執行相應操作。以下是一個示例:
1 |
goCopy Codefunc BasicAuth() gin.HandlerFunc { |
以上實現了一個基本認證中間件,該中間件要求請求包含Basic Auth信息,并且用戶名和密碼必須正確才能通過。否則將返回401 Unauthorized錯誤響應。
另外中間件在實現接口埋點功能也經常會被用到
中間件的順序
在Gin中,中間件的順序非常重要,因為它們按照注冊順序依次執行。特別是對于局部中間件,如果中間件的順序不正確,則可能會導致某些中間件被跳過或者執行順序出錯。
可以利用group來實現不同組別的路由來添加不同的中間件,比如有的是外部接口需要驗證數字簽名,有的則是需要驗證用的登錄態等等。
另外在編寫中間件的時候,如果接口異常時想及時上報,可以在中間件內捕獲異常,如下
1 |
func PointAudit() gin.HandlerFunc { |
小結
中間件是Gin框架的一個關鍵特性,它可以用于實現各種常見功能,如日志記錄、錯誤處理、認證等。全局中間件適用于所有請求,而局部中間件只對特定路由或路由組生效。編寫自定義中間件非常簡單,只需要實現一個接受*gin.Context作為參數的函數即可。在使用中間件時,中間件的順序非常重要,正確的順序可以避免許多問題的出現。