增加请求路由与参数格式化

This commit is contained in:
白茶清欢 2022-05-01 22:21:49 +08:00
parent 82aa9d1e32
commit cedfa9c3bf
2 changed files with 54 additions and 9 deletions

View File

@ -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 接口响应结果

View File

@ -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, "//", "/")
}