增加对响应体的解析

This commit is contained in:
2022-06-30 18:26:16 +08:00
parent f766b4c7e3
commit 04f782ac07
4 changed files with 70 additions and 20 deletions

79
rpc.go
View File

@ -18,6 +18,8 @@ import (
"sync"
"time"
"github.com/tidwall/gjson"
"git.zhangdeman.cn/zhangdeman/util"
"github.com/ddliu/go-httpclient"
@ -218,14 +220,15 @@ func (r *request) Get() error {
// Date : 14:24 2022/6/30
func (r *request) Send(ctx *gin.Context, serviceFlag string, apiFlag string, parameter map[string]interface{}, receiver interface{}) error {
var (
serviceConfig *Service
apiConfig *Api
err error
fullURL string
client *httpclient.HttpClient
body []byte
response *httpclient.Response
responseBody []byte
serviceConfig *Service
apiConfig *Api
err error
fullURL string
client *httpclient.HttpClient
body []byte
response *httpclient.Response
responseBody []byte
code, message, data string
)
if serviceConfig, apiConfig, err = r.GetServiceApi(serviceFlag, apiFlag); nil != err {
return err
@ -237,21 +240,12 @@ func (r *request) Send(ctx *gin.Context, serviceFlag string, apiFlag string, par
return err
}
// 判断状态码
isHttpSuccess := false
for _, successCode := range apiConfig.SuccessHttpCodeList {
if successCode == response.StatusCode {
isHttpSuccess = true
break
}
}
if !isHttpSuccess {
return fmt.Errorf("http响应状态码异常 -> %v", response.StatusCode)
}
if responseBody, err = io.ReadAll(response.Body); nil != err {
return err
}
// 解析响应的业务数据
code, message, data = r.getCodeAndMessageAndData(apiConfig, responseBody)
return nil
}
@ -317,3 +311,48 @@ func (r *request) getFullURLAndBody(serviceConfig *Service, apiConfig *Api, para
}
return strings.ReplaceAll(fullURL, "//", "/") + "?" + query, body
}
// validateResponseHttpCode 验证http状态码
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:18 2022/6/30
func (r *request) validateResponseHttpCode(apiConfig *Api, response *httpclient.Response) error {
// 判断状态码
isHttpSuccess := false
for _, successCode := range apiConfig.SuccessHttpCodeList {
if successCode == response.StatusCode {
isHttpSuccess = true
break
}
}
if !isHttpSuccess {
return fmt.Errorf("http响应状态码异常 -> %v", response.StatusCode)
}
return nil
}
// getCodeAndMessageAndData 读取业务状态码 + 文案 + 数据
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:20 2022/6/30
func (r *request) getCodeAndMessageAndData(apiConfig *Api, responseBody []byte) (string, string, string) {
var (
code = SpecialFiledVal
message = SpecialFiledVal
data string
)
if apiConfig.CodeField != SpecialFiledVal {
code = gjson.Get(string(responseBody), apiConfig.CodeField).String()
}
if apiConfig.MessageField != SpecialFiledVal {
message = gjson.Get(string(responseBody), apiConfig.MessageField).String()
}
if apiConfig.DataField == SpecialFiledVal {
data = string(responseBody)
} else {
data = gjson.Get(string(responseBody), apiConfig.DataField).String()
}
return code, message, data
}