Golang 请求中间件库?

标签 go

我正在为我的路由设置的复用器使用 gorilla 复用器。

是否有任何开源库可以提供某种请求中间件?

router.HandleFunc("/products", GetProducts).Methods("GET")

所以目前我有 GetProducts 函数,它将返回产品等。

但这是我正在构建的 REST api,所以我必须处理加载用户、验证请求的“api token ”等事情。

我不想对每个方法都这样做,所以我希望我有一些请求中间件,当我可以在执行之前/之后执行此操作时,以及添加诸如 User 之类的东西, 权限每个中间件函数中的上下文。

最佳答案

您可以使用 Go Gin支持中间件的 HTTP Web 框架以及您想要的:

使用中间件:

func main() {
// Creates a router without any middleware by default
r := gin.New()

// Global middleware
// Logger middleware will write the logs to gin.DefaultWriter even you set with GIN_MODE=release.
// By default gin.DefaultWriter = os.Stdout
r.Use(gin.Logger())

// Recovery middleware recovers from any panics and writes a 500 if there was one.
r.Use(gin.Recovery())

// Per route middleware, you can add as many as you desire.
r.GET("/benchmark", MyBenchLogger(), benchEndpoint)

// Authorization group
// authorized := r.Group("/", AuthRequired())
// exactly the same as:
authorized := r.Group("/")
// per group middleware! in this case we use the custom created
// AuthRequired() middleware just in the "authorized" group.
authorized.Use(AuthRequired())
{
    authorized.POST("/login", loginEndpoint)
    authorized.POST("/submit", submitEndpoint)
    authorized.POST("/read", readEndpoint)

    // nested group
    testing := authorized.Group("testing")
    testing.GET("/analytics", analyticsEndpoint)
}

// Listen and serve on 0.0.0.0:8080
r.Run(":8080")
}

关于Golang 请求中间件库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47116305/

相关文章:

amazon-web-services - 使用 AWS EC2 Golang GO 端点在 Docker 部署上获取 JSON 时出现问题

go - 如何导入项目特定的 go 包,同时为完全不同的项目通用的 go 包维护一个单独的位置?

mysql - 在 Go REST-API 中传输 MySQL JSON 数据类型

git - 是否有golang提交后构建过程

go - 使用 go channel 使结构线程安全

go - PowerPC 版本的 Go

go - 如何关闭服务器的grpc流

Go Struct 中的 Go Protobuf 声明和可选字段(字符串指针)

mongodb - 如何在mongodb中检索整数ObjectID

string - 字符串的零是多少?