网关简单使用模拟后端请求

type Student struct {
	QQ   string `json:"qq"`
	Name string `json:"name"`
}
type student struct {
	Message    string  `json:"message"`
	Statuscode int     `json:"statuscode"`
	Data       Student `json:"data"`
}
func Init(e *gin.Engine) {
	e.POST("/api/:name/*urlname", Test)//api请求参数
}

func Test(c *gin.Context) {
	name := c.Param("name")//获取api请求参数
	urlname := c.Param("urlname")

	if name == "" || urlname == "" {
		logger.Sugar.Error("解析api参数错误")
		serverResponse(c, gin.H{"statuscode": 201, "message": "api参数不完整"})
		return
	}
	var data []byte
	switch {
	case name == "login"://服务名称
		_, data = service.TestServer(c, "8080", urlname)//转化服务端口号获取访问路由函数
		switch urlname {//switch嵌套
		case "/hello":
			datatemp, err := service.HelloJsonDataServer(data)//进行数据解密以及后端访问请求
			if err != nil {
				logger.Sugar.Error(" readAll json err:", err)
				return
			}
		    serverResponse(c,gin.H{"data":datatemp})
		case "/test":
			datatemp, err := service.TestJsonDataServer(data)
			if err != nil {
				logger.Sugar.Error(" readAll json err:", err)
				return
			}
			serverResponse(c, gin.H{"data": datatemp})
		default:
			serverResponse(c, gin.H{"statuscode": 202, "message": "api参数不存在"})
		}
	case name == "message":
		_, data = service.TestServer(c, "8081", urlname)
	case name == "blogs":
		_, data = service.TestServer(c, "8082", urlname)
	default:
		serverResponse(c, gin.H{"statuscode": 202, "message": "api参数不存在"})
	}

}
//service.go
func TestServer(c *gin.Context,port,urlname string) (error,[]byte) {
	var login infromation.Login
	_,_ = aes.DataDispose(c,&login)//数据进行解密
	data, err := json.Marshal(login)//json反序列化获取字节数组
	url := "http://127.0.0.1:"+port+urlname//访问的服务路由
	body := bytes.NewBuffer(data)//转化字节类型
	request, err := http.NewRequest("POST", url, body)//发起新请求
	if err != nil {
		logger.Sugar.Error("建立模拟请求失败:",err)
		return err,nil
	}
	client := &http.Client{}//建立新的client用client对象去访问要访问的服务,然后返回一个*http.Request对象
	response, err := client.Do(request)//执行请求获取结果
	if err != nil {
		logger.Sugar.Error("获取模拟请求响应数据失败:",err)
		return err,nil
	}
	jsonData, err := ioutil.ReadAll(response.Body) //获取post的数据
	if err != nil {
		logger.Sugar.Error("获取模拟请求响应获取post的数据失败:",err)
		return err,nil
	}
	return nil,jsonData
}
```
func HelloJsonDataServer(data []byte)(string,error)  {
	var inf infromation.Studentinf
	// var inftemp infromation.Studentinf
	err := json.Unmarshal(data,&inf)
	if err !=nil{
		logger.Sugar.Error("解析模拟请求响应获取post的数据失败:",err)
		return "",err
	}
	_,datatemp1:=aes.AesEcrypt("tuyanwen",gin.H{"data":inf})
	return datatemp1,nil
}
```
```
func TestJsonDataServer(data []byte)(infromation.Studentinf,error)  {
	var inf infromation.Studentinf
	var inftemp infromation.Studentinf
	err := json.Unmarshal(data,&inf)
	if err !=nil{
		logger.Sugar.Error("解析模拟请求响应获取post的数据失败:",err)
		return inftemp,err
	}
	return inf,nil
}
package infromation
type Student struct{
	QQ string `json:"qq"`
	Name string `json:"name"`
}
type Studentinf struct{
	Message string `json:"message"`
	Statuscode int `json:"statuscode"`
	Data Student `json:"data"`
}

type Login struct{
	UserEmail string `json:"useremail"`
	PassWord string `json:"password"`
}
```
```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值