为什么需要中间件
我们可能需要对每个请求/返回做一些特定的操作,比如
- 记录请求的 log 信息
- 在返回中插入一个 Header
- 部分接口进行鉴权
这些都需要一个统一的入口。这个功能可以通过引入 middleware 中间件来解决。Go 的 net/http 设计的一大特点是特别容易构建中间件。apiserver 所使用的 gin 框架也提供了类似的中间件。
gin里面的中间件
在 gin 中可以设置 3 种类型的 middleware:
- 全局中间件
router := gin.New()
// 添加自定义的 logger 中间件
router.Use(middleware.Logger(), gin.Recovery())
- 单个路由中间件
userRouter.GET("/profile/", middleware.Auth(), handler.UserProfile)
userRouter.POST("/update", middleware.Auth(), handler.UpdateUserProfile)
- 群组中间件
authorized := router.Group("/", MyMiddelware())
// 或者这样用:
authorized := router.Group("/")
authorized.Use(MyMiddelware())
{
authorized.POST(&