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"`
}
```
```
网关简单使用模拟后端请求
最新推荐文章于 2023-02-14 10:12:07 发布