首页 > 其他分享 >Go实战全家桶之九:统一网关

Go实战全家桶之九:统一网关

时间:2024-05-28 12:58:31浏览次数:19  
标签:实战 网关 res ctx var result Go path webclient

开源:

https://gitee.com/ichub/gocenter.git

83b0049b54e34d3aa0ab670427c17909.png

代码:

配置:

gateway:
  bypass:
    - path: /goauth/login
    - path: /goauth/logout

  routes:
    - path: /datadict
      serviceId: web.platform.com
    - path: /deptemp
      serviceId: web.platform.com
    - path: /gouser
      serviceId: web.platform.com
    - path: /goauth
      serviceId: web.platform.com

    - path: /gohrms
      serviceId: web.biz.com
    - path: /gopayment
      serviceId: web.biz.com
    - path: /goattend
      serviceId: web.biz.com

路由转换:

func (this *RouteParse) Get(ctx *gin.Context) *webclient.WebMsgProxyResp {

    var result = this.Filter(ctx)
    if !result.IsSuccess() {
       var res = webclient.NewWebMsgProxyResp()
       res.SetBody(result.ToBytes())
       return res
    }
    var url, err = this.BuildRouteUrl()
    if err != nil {
       var res = webclient.NewWebMsgProxyResp()
       res.SetBody(result.ToBytes())
    }
    var req = webclient.NewWebMsgProxy(url)
    return req.Get(ctx, this.WebClient)

}

// copyHeaders
func (this *RouteParse) Post(ctx *gin.Context) *webclient.WebMsgProxyResp {
    var result = this.Filter(ctx)
    if !result.IsSuccess() {
       var res = webclient.NewWebMsgProxyResp()
       res.SetBody(result.ToBytes())
       return res
    }
    var url, err = this.BuildRouteUrl()
    if err != nil {
       var res = webclient.NewWebMsgProxyResp()
       res.SetErr(err)
       res.SetBody(result.ToBytes())
       return res
    }

    var req = webclient.NewWebMsgProxy(url)
    return req.Post(ctx, this.WebClient)

}

func (this *RouteParse) Delete(ctx *gin.Context) *webclient.WebMsgProxyResp {
    var result = this.Filter(ctx)
    if !result.IsSuccess() {
       var res = webclient.NewWebMsgProxyResp()
       res.SetBody(result.ToBytes())
       return res
    }
    var url, err = this.BuildRouteUrl()
    if err != nil {
       var res = webclient.NewWebMsgProxyResp()
       res.SetBody(result.ToBytes())
    }
    var req = webclient.NewWebMsgProxy(url)
    return req.Delete(ctx, this.WebClient)

}

func (this *RouteParse) Put(ctx *gin.Context) *webclient.WebMsgProxyResp {
    var result = this.Filter(ctx)
    if !result.IsSuccess() {
       var res = webclient.NewWebMsgProxyResp()
       res.SetBody(result.ToBytes())
    }
    var url, err = this.BuildRouteUrl()
    if err != nil {
       var res = webclient.NewWebMsgProxyResp()
       res.SetErr(err)
       res.SetBody(result.ToBytes())
       return res
    }

    var req = webclient.NewWebMsgProxy(url)
    return req.Put(ctx, this.WebClient)
}

测试用例:

结果:

{
     "code": 200,
     "msg": "成功",
     "page_size": 2,
     "current": 1,
     "total": 15,
     "data": [
          {
               "parent_id": -1,
               "dep_path": ".1",
               "type": 0,
               "mngr_id": 0,
               "id": 1,
               "code": "1",
               "name": "股东会",
               "enabled": 1,
               "is_parent": 1
          },
          {
               "name": "董事会",
               "dep_path": ".1.4",
               "is_parent": 1,
               "mngr_id": 0,
               "id": 4,
               "code": "4",
               "parent_id": -1,
               "enabled": 1,
               "type": 0
          }
     ]
}

请求:

{
     "page_size": 2,
     "current": 1,
     "order_by": [],
     "fields": [], 
}

标签:实战,网关,res,ctx,var,result,Go,path,webclient
From: https://blog.csdn.net/leijmdas/article/details/139251105

相关文章

  • go timer
    Timer的创建Timer是一次性的时间触发事件,这点与Ticker不同,后者则是按一定时间间隔持续触发时间事件。Timer常见的使用场景如下:场景1:t:=time.AfterFunc(d,f)场景2:select{casem:=<-c:handle(m)case<-time.After(5*time.Minute):fmt.Pri......
  • 【转载】从零开始的硬件之路14:解决AD工程文件过大问题及运行AD插件导入Logo
    原文链接:https://zhuanlan.zhihu.com/p/397285331 这篇讲两个内容,分别是”解决AD工程文件过大问题“和”运行AD插件导入图形符号“。目录:AD工程文件过大问题运行AD插件导入Logo首先何为工程文件过大,来图直接说明:可以看到一个工程文件占用了两百多的内存(我以前的一个......
  • LLM 大模型学习必知必会系列(七):掌握分布式训练与LoRA/LISA微调:打造高性能大模型的秘
    LLM大模型学习必知必会系列(七):掌握分布式训练与LoRA/LISA微调:打造高性能大模型的秘诀进阶实战指南1.微调(SupervisedFinetuning)指令微调阶段使用了已标注数据。这个阶段训练的数据集数量不会像预训练阶段那么大,最多可以达到几千万条,最少可以达到几百条到几千条。指令微调可以......
  • Red is good
    Description桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。Input一行输入两个数R,B,其值在0到5000之间Output在最优策略下平均能得到多少钱。解析设计状态:\(f[i]......
  • Python数据分析与挖掘实战(5章)
    非原创,仅个人关于《Python数据分析与挖掘实战》的学习笔记5挖掘建模importwarningsimportmatplotlib.pyplotaspltimportnumpyasnpimportpandasaspd#解决中文乱码plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False#......
  • SpringSecurity实战!(前后端分离)
     前言SpringSecurity是Spring家族中的一个安全管理框架。相比与另外一个安全框架 Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。一般来说中大型的项目都是使用SpringSecurity来做安全框架。小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更......
  • 网关路由快速入门
    在SpringBoot中整合SpringCloudGateway是一个常见的需求,尤其是当需要构建一个微服务架构的应用程序时。SpringCloudGateway是SpringCloud生态系统中的一个项目,它提供了一个API网关,用于处理服务之间的请求路由、安全、监控和限流等功能。使用引入依赖<dependency>......
  • 【秒杀系统】秒杀系统实战(四):缓存与数据库双写一致性深度分析
    【秒杀系统】秒杀系统实战(四):缓存与数据库双写一致性深度分析前言微笑挖坑,努力填坑。————已经拥有黑眼圈,但还没学会小猪老师时间管理学的蛮三刀同学本文是秒杀系统的第四篇,我们来讨论秒杀系统中缓存热点数据的问题,进一步延伸到数据库和缓存的双写一致性问题,并且给......
  • Django 接收用户请求并通过HTTP回应
    准备工作python版本:3.10(本人的)Django版本:3.2.12(LTS长期支持版)注意:不同Django所对应的python版本是有要求的,建议事先查找自己的python版本,Django建议下载LTS长期支持版的安装:python3 //查看版本(在window用python命令)sudopip3installdjango[版......
  • 【解决办法】RegularPolygon.__init__() takes 3 positional arguments but 4 were gi
    我在学习用Python绘制一个六边形且隐藏全部轴脊的代码时,出现如下报错:RegularPolygon._init_()takes3positionalargumentsbut4weregiven报错意思:RegularPolygon.__init__()接受3个位置参数,但给定了4个通过上网查询、询问同学,我解决了这个问题,其中的解决过程我详细地......