接口转发
-
聚合层(BFF)接口主要有两种:
-
本文档提供转发接口模板, 主要功能:
转发
func ReverseProxyWithPattern(scheme, host, currentUrlPrefix, realUrlPrefix string) gin.HandlerFunc {
return func(c *gin.Context) {
subPath := strings.TrimPrefix(c.Request.URL.Path, currentUrlPrefix)
realUrlPath := realUrlPrefix + subPath
director := func(req *http.Request) {
req.URL.Scheme = scheme
req.URL.Host = host
req.URL.Path = realUrlPath
}
setHeadersWithContextKeys(c)
proxy := &httputil.ReverseProxy{Director: director}
proxy.ServeHTTP(c.Writer, c.Request)
}
}
func ReverseProxy(scheme, host, path string) gin.HandlerFunc {
return func(c *gin.Context) {
director := func(req *http.Request) {
req.URL.Scheme = scheme
req.URL.Host = host
req.URL.Path = path
}
setHeadersWithContextKeys(c)
proxy := &httputil.ReverseProxy{Director: director}
proxy.ServeHTTP(c.Writer, c.Request)
}
}
func setHeadersWithContextKeys(c *gin.Context) {
for key, value := range c.Keys {
c.Request.Header.Set(key, fmt.Sprintf("%+v", value))
}
}
转发到达服务解析用户身份
可使用如下结构体绑定header信息
type UserInfo struct {
UserId int `header:"Userid"`
UserName string `header:"Username"`
GroupId int `header:"Usergroup"`
GroupName string `header:"Usergroupname"`
OrgId int `header:"Orgid"`
OrgName string `header:"Orgname"`
}