diff --git a/request/restful.go b/request/restful.go new file mode 100644 index 0000000..5af4036 --- /dev/null +++ b/request/restful.go @@ -0,0 +1,77 @@ +// Package request ... +// +// Author: go_developer@163.com<白茶清欢> +// +// Description: +// +// File: restful.go +// +// Version: 1.0.0 +// +// Date: 2021/07/07 20:11:57 +package request + +import ( + "fmt" + "strings" +) + +// URIConfig 构建URI的配置 +// +// Author : go_developer@163.com<白茶清欢> +type URIConfig struct { + Template string // url模版 + IsRestful bool // 是否是restful url + Left string // 左侧分隔符,针对restful生效 + Right string // 右侧分隔符,针对restful生效 + RemoveURIParam bool // 移除已经适配到URI里面的参数, 针对restful生效 +} + +// NewDefaultNormalURIConfig构建普通URL配置 +// +// Author : go_developer@163.com<白茶清欢> +func NewDefaultNormalURIConfig(urlTemplate string) *URIConfig { + return &URIConfig{ + Template: urlTemplate, + IsRestful: false, + Left: "", + Right: "", + RemoveURIParam: false, + } +} + +// NewDefaultNormalURIConfig 构建普通 restful URL配置 +// +// Author : go_developer@163.com<白茶清欢> +func NewDefaultRestfullURIConfig(urlTemplate string, left string, right string, removeURIParam bool) *URIConfig { + return &URIConfig{ + Template: urlTemplate, + IsRestful: true, + Left: left, + Right: right, + RemoveURIParam: removeURIParam, + } +} + +// BuildRestfulURL 构建 restful URI +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2021/07/07 20:14:54 +func BuildURL(uriConfig *URIConfig, parameter map[string]interface{}) (string, map[string]interface{}) { + if !uriConfig.IsRestful { + return uriConfig.Template, parameter + } + uri := uriConfig.Template + finalParameter := make(map[string]interface{}) + for field, val := range parameter { + if strings.Contains(uri, uriConfig.Left+field+uriConfig.Right) { + uri = strings.ReplaceAll(uri, "{"+field+"}", fmt.Sprintf("%v", val)) + if uriConfig.RemoveURIParam { + continue + } + } + finalParameter[field] = val + } + return uri, finalParameter +}