diff --git a/curl/define.go b/curl/define.go index 7d9cea6..98dcc4f 100644 --- a/curl/define.go +++ b/curl/define.go @@ -37,15 +37,17 @@ const ( // // Date: 2022/05/01 20:14:18 type ApiRequestConfig struct { - Method string `json:"method"` // 请求方法 - Domain string `json:"domain"` // 请求域名 - URI string `json:"uri"` // 请求的路由 - BindRouterParam []string `json:"bind_router_param"` // 绑定到路由的参数列表 - ResponseCodeField string `json:"response_code_field"` // 业务状态码字段 - ResponseMessageField string `json:"response_message_field"` // 业务状态码描述的字段 - ResponseDataField string `json:"response_data_field"` // 业务数据的字段 - SuccessCodeList []string `json:"success_code_list"` // 代表请求成功的code列表 - SuccessHttpCodelist []string `json:"success_http_code_list"` // 代表成功的http code列表 + Method string `json:"method"` // 请求方法 + Domain string `json:"domain"` // 请求域名 + URI string `json:"uri"` // 请求的路由 + ResponseCodeField string `json:"response_code_field"` // 业务状态码字段 + ResponseMessageField string `json:"response_message_field"` // 业务状态码描述的字段 + ResponseDataField string `json:"response_data_field"` // 业务数据的字段 + SuccessCodeList []string `json:"success_code_list"` // 代表请求成功的code列表 + SuccessHttpCodeList []string `json:"success_http_code_list"` // 代表成功的http code列表 + Parameter map[string]interface{} `json:"parameter"` // 传入的请求参数 + Body []byte `json:"-"` // 请求体 + FullURL string `json:"full_url"` // 完整请求地址 } // ApiResponse 接口响应结果 diff --git a/curl/request.go b/curl/request.go index 0998d4e..6ea46a5 100644 --- a/curl/request.go +++ b/curl/request.go @@ -12,6 +12,8 @@ package curl import ( + "encoding/json" + "fmt" "net/http" "strings" ) @@ -57,6 +59,7 @@ func Request(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiResp // // Date: 2022/05/01 21:29:09 func GET(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiResponse { + buildRequestURLAndParam(apiConfig, param) return nil } @@ -66,6 +69,7 @@ func GET(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiResponse // // Date : 2022/05/01 21:31:36 func POST(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiResponse { + buildRequestURLAndParam(apiConfig, param) return nil } @@ -75,6 +79,7 @@ func POST(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiRespons // // Date : 2022/05/01 21:31:52 func PUT(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiResponse { + buildRequestURLAndParam(apiConfig, param) return nil } @@ -84,6 +89,7 @@ func PUT(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiResponse // // Date : 2022/05/01 21:32:08 func DELETE(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiResponse { + buildRequestURLAndParam(apiConfig, param) return nil } @@ -93,6 +99,7 @@ func DELETE(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiRespo // // Date : 2022/05/01 21:32:18 func OPTION(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiResponse { + buildRequestURLAndParam(apiConfig, param) return nil } @@ -102,6 +109,7 @@ func OPTION(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiRespo // // Date : 2022/05/01 21:36:12 func Patch(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiResponse { + buildRequestURLAndParam(apiConfig, param) return nil } @@ -111,6 +119,7 @@ func Patch(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiRespon // // Date : 2022/05/01 21:36:24 func Trace(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiResponse { + buildRequestURLAndParam(apiConfig, param) return nil } @@ -120,5 +129,39 @@ func Trace(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiRespon // // Date : 2022/05/01 21:36:39 func Connect(apiConfig *ApiRequestConfig, param map[string]interface{}) *ApiResponse { + buildRequestURLAndParam(apiConfig, param) return nil } + +// buildRequestURLAndParam 构建完整请求URL与请求参数 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 21:55 2022/5/1 +func buildRequestURLAndParam(apiConfig *ApiRequestConfig, param map[string]interface{}) { + apiConfig.Method = strings.ToUpper(apiConfig.Method) + formatParam := make(map[string]interface{}) + for paramName, paramValue := range param { + uriTemplate := "{" + paramName + "}" + if strings.Contains(apiConfig.URI, uriTemplate) { + apiConfig.URI = strings.ReplaceAll(apiConfig.URI, uriTemplate, fmt.Sprintf("%v", paramValue)) + continue + } + formatParam[paramName] = paramValue + } + apiConfig.Parameter = formatParam + paramPair := make([]string, 0) + switch apiConfig.Method { + case http.MethodPost: + apiConfig.Body, _ = json.Marshal(formatParam) + default: + for paramName, paramValue := range formatParam { + paramPair = append(paramPair, fmt.Sprintf("%v=%v", paramName, paramValue)) + } + if len(paramPair) > 0 { + apiConfig.URI = apiConfig.URI + "?" + strings.Join(paramPair, "&") + } + } + apiConfig.FullURL = strings.ReplaceAll(apiConfig.Domain+"/"+apiConfig.URI, "//", "/") + +}