修复参数构建 + 验证相关一系列BUG

This commit is contained in:
2025-03-31 17:17:20 +08:00
parent f14401a39f
commit 5d790ff1e7
5 changed files with 56 additions and 29 deletions

View File

@ -22,7 +22,7 @@ import (
// Date : 14:14 2025/3/28
type RequestConfig struct {
Ctx context.Context `json:"-"` // 上下文
CommonParam map[string]any `json:"common_param"` // 公共参数
CommonParam map[string]map[string]any `json:"common_param"` // 公共参数
Group [][]*RequestConfigGroupItem `json:"group"` // 请求分组
ResultRule []*RequestConfigResultRule `json:"result_rule"` // 结果提取规则, 多个接口的结果构造成一个返回结果
}

View File

@ -36,6 +36,28 @@ func Request(req *RequestConfig, receiver any) *Response {
reqCfg: req,
receiver: receiver,
}
c.resp.AliasResultTable[CommonServiceAlias] = &define.Response{
Query: c.reqCfg.CommonParam[consts.RequestDataLocationQuery.String()],
Header: c.reqCfg.CommonParam[consts.RequestDataLocationHeader.String()],
Cookie: c.reqCfg.CommonParam[consts.RequestDataLocationCookie.String()],
Data: "",
Code: "",
Message: "",
Body: c.reqCfg.CommonParam[consts.RequestDataLocationBody.String()],
ExtendData: nil,
HttpCode: 0,
HttpCodeStatus: "",
ResponseDataRule: nil,
Seq: 0,
RequestStartTime: 0,
RequestFinishTime: 0,
UsedTime: 0,
RestyResponse: nil,
IsSuccess: false,
RequestCount: 0,
FailInfo: nil,
CacheInfo: nil,
}
return c.Request()
}
@ -152,9 +174,10 @@ func (c *client) buildRequestParams(apiCfg *RequestConfigGroupItem) (map[string]
sourceData := map[string]any{}
for aliasName, itemRes := range c.resp.AliasResultTable {
sourceData[aliasName] = map[string]any{
consts.ResponseDataLocationBody.String(): itemRes.Body[apiCfg.RequestCfg.DataField],
consts.ResponseDataLocationHeader.String(): itemRes.Header,
consts.ResponseDataLocationCookie.String(): itemRes.Cookie,
strings.ToLower(consts.ResponseDataLocationBody.String()): itemRes.Body[apiCfg.RequestCfg.DataField],
strings.ToLower(consts.ResponseDataLocationHeader.String()): itemRes.Header,
strings.ToLower(consts.ResponseDataLocationCookie.String()): itemRes.Cookie,
strings.ToLower(consts.RequestDataLocationQuery.String()): itemRes.Query,
}
}
sourceDataByte := serialize.JSON.MarshalForByteIgnoreError(sourceData)
@ -162,7 +185,8 @@ func (c *client) buildRequestParams(apiCfg *RequestConfigGroupItem) (map[string]
for _, itemParam := range apiCfg.ParamRuleList {
arr := strings.Split(itemParam.Path, ".")
sourcePath := itemParam.SourceResultPath
sourcePath = fmt.Sprintf("%v.%v.%v", itemParam.SourceAlias, itemParam.SourceResultLocation, itemParam.SourceResultPath)
sourcePath = fmt.Sprintf("%v.%v.%v", itemParam.SourceAlias, strings.ToLower(itemParam.SourceResultLocation), itemParam.SourceResultPath)
targetPath := fmt.Sprintf("%v.%v", strings.ToLower(itemParam.Location.String()), itemParam.Path)
validateRuleList = append(validateRuleList, validate.StructField{
JsonTag: arr[len(arr)-1],
Type: itemParam.Type,
@ -170,10 +194,11 @@ func (c *client) buildRequestParams(apiCfg *RequestConfigGroupItem) (map[string]
RuleList: nil,
DefaultValue: itemParam.DefaultValue,
SourcePath: sourcePath,
TargetPath: fmt.Sprintf("%v.%v", itemParam.Location, itemParam.Path),
TargetPath: targetPath,
Errmsg: "",
})
}
buildRes, err := validate.Run(sourceDataByte, validateRuleList)
if nil != err {
return nil, err