Golang Gin Gonic веб-фреймворк прокси маршрут к другому бэкэнду
Как отменить прокси-веб-запросы для нескольких маршрутов в другой бэкэнд в Gin Gonic web golang framework
Есть ли способ прямой пересылки в функции Handle, как показано ниже?
router := gin.New()
router.Handle("POST", "/api/v1/endpoint1", ForwardToAnotherBackend)
2 ответа
Решение
Вы можете сделать это с помощью стандартной библиотеки httputil.ReverseProxy.
Я еще не нашел причину использовать джин, я фанат придерживаться stdlib, когда это возможно. Однако я считаю, что вы можете обернуть этот обработчик ReverseProxy в gin.WrapH()
чтобы иметь возможность использовать его с вашим роутером джина.
Это было решение, которое я использовал для обратного проксирования определенного подмножества конечных точек из среды gin в другой бэкэнд:
router.POST("/api/v1/endpoint1", ReverseProxy()
func ReverseProxy() gin.HandlerFunc {
target := "localhost:3000"
return func(c *gin.Context) {
director := func(req *http.Request) {
r := c.Request
req = r
req.URL.Scheme = "http"
req.URL.Host = target
req.Header["my-header"] = []string{r.Header.Get("my-header")}
// Golang camelcases headers
delete(req.Header, "My-Header")
}
proxy := &httputil.ReverseProxy{Director: director}
proxy.ServeHTTP(c.Writer, c.Request)
}
}
Когда вы используете Director:
req.URL.Scheme = "http"
req.Host, req.URL.Host = "google.com", "google.com"