go-resty/resty 做了简单的封装。

package utils

import (
    "crypto/tls"
    "github.com/go-resty/resty/v2"
    "time"
)

// ResponseJson json 响应约定
type ResponseJson struct {
    Code uint32      `json:"code"`
    Msg  string      `json:"msg"`
    Data interface{} `json:"data"`
}

const httpClientTimeOut = 3
const httpClientRetryCount = 3

// HttpGetResJson get request and json response
func HttpGetResJson(url string, queryParams map[string]string, result interface{}) (res *resty.Response, err error) {
    client := resty.New()

    client.SetTimeout(time.Second * httpClientTimeOut)
    client.SetRetryCount(httpClientRetryCount)
    client.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})

    res, err = client.R().
        SetQueryParams(queryParams).
        SetHeader("Accept", "application/json").
        SetResult(result).
        Get(url)

    return res, err
}

func HttpPostFormResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    return HttpSendFormResJson(url, "POST", formData, result)
}
func HttpPutFormResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    return HttpSendFormResJson(url, "PUT", formData, result)
}
func HttpPatchFormResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    return HttpSendFormResJson(url, "PATCH", formData, result)
}
func HttpDeleteFormResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    return HttpSendFormResJson(url, "DELETE", formData, result)
}
func HttpOptionsFormResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    return HttpSendFormResJson(url, "OPTIONS", formData, result)
}
func HttpHeadFormResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    return HttpSendFormResJson(url, "HEAD", formData, result)
}


func HttpPostJsonResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    return HttpSendJsonResJson(url, "POST", formData, result)
}
func HttpPutJsonResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    return HttpSendJsonResJson(url, "PUT", formData, result)
}
func HttpPatchJsonResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    return HttpSendJsonResJson(url, "PATCH", formData, result)
}
func HttpDeleteJsonResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    return HttpSendJsonResJson(url, "DELETE", formData, result)
}
func HttpOptionsJsonResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    return HttpSendJsonResJson(url, "OPTIONS", formData, result)
}
func HttpHeadJsonResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    return HttpSendJsonResJson(url, "HEAD", formData, result)
}

// HttpSendFormResJson send formData and response json
func HttpSendFormResJson(url, method string, formData map[string]string, result interface{}) (res *resty.Response, err error) {
    client := resty.New()

    client.SetTimeout(time.Second * httpClientTimeOut)
    client.SetRetryCount(httpClientRetryCount)
    client.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})

    req := client.R().
        SetHeader("Content-Type", "application/x-www-form-urlencoded").
        SetHeader("Accept", "application/json").
        SetFormData(formData).
        SetResult(result)

    switch strings.ToLower(method) {
    case "post":
        res, err = req.Post(url)
    case "put":
        res, err = req.Put(url)
    case "patch":
        res, err = req.Patch(url)
    case "delete":
        res, err = req.Delete(url)
    case "options":
        res, err = req.Options(url)
    default:
        res, err = req.Head(url)
    }

    return res, err
}

// HttpSendJsonResJson send json and response json
func HttpSendJsonResJson(url, method string, body interface{}, result interface{}) (res *resty.Response, err error) {
    client := resty.New()

    client.SetTimeout(time.Second * httpClientTimeOut)
    client.SetRetryCount(httpClientRetryCount)
    client.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})

    req := client.R().
        SetHeader("Content-Type", "application/json").
        SetHeader("Accept", "application/json").
        SetBody(body).
        SetResult(result)

    switch strings.ToLower(method) {
    case "post":
        res, err = req.Post(url)
    case "put":
        res, err = req.Put(url)
    case "patch":
        res, err = req.Patch(url)
    case "delete":
        res, err = req.Delete(url)
    case "options":
        res, err = req.Options(url)
    default:
        res, err = req.Head(url)
    }

    return res, err
}

big_cat
1.7k 声望130 粉丝

规范至上