7
0
gaore-common-sdk-go/sdk/requests/request.go
2020-08-06 10:35:24 +08:00

232 lines
4.9 KiB
Go

package requests
import (
"errors"
"fmt"
"io"
"log"
"reflect"
"time"
)
const (
RPC = "RPC"
ROA = "ROA"
HTTP = "HTTP"
HTTPS = "HTTPS"
JSON = "JSON"
XML = "XML"
DefaultHttpPort = "80"
GET = "GET"
PUT = "PUT"
POST = "POST"
DELETE = "DELETE"
PATCH = "PATCH"
HEAD = "HEAD"
OPTIONS = "OPTIONS"
Json = "application/json"
Xml = "application/xml"
Raw = "application/octet-stream"
Form = "application/x-www-form-urlencoded"
Header = "Header"
Query = "Query"
Body = "Body"
Path = "Path"
HeaderSeparator = "\n"
)
type AcsRequest interface {
GetReadTimeout() time.Duration
GetConnectTimeout() time.Duration
SetReadTimeout(readTimeOut time.Duration)
SetConnectTimeout(connectTimeOut time.Duration)
SetHTTPSInsecure(isInsecure bool)
GetHTTPSInsecure() *bool
GetQueryParams() map[string]string
GetFormParams() map[string]string
GetMethod() string
GetScheme() string
GetDomain() string
GetActionName() string
GetAcceptFormat() string
GetHeaders() map[string]string
BuildUrl() string
BuildQueries() string
SetScheme(scheme string)
SetContent(content []byte)
SetDomain(host string)
SetStringToSign(stringToSign string)
GetBodyReader() io.Reader
addHeaderParam(key, value string)
addQueryParam(key, value string)
addFormParam(key, value string)
}
type baseRequest struct {
Scheme string
Method string
Port string
Domain string
From string
ReadTimeout time.Duration
ConnectTimeout time.Duration
isInsecure *bool
AcceptFormat string
actionName string
userAgent map[string]string
product string
version string
QueryParams map[string]string
Headers map[string]string
FormParams map[string]string
Content []byte
queries string
stringToSign string
}
func (request *baseRequest) SetContent(content []byte) {
request.Content = content
}
func (request *baseRequest) GetAcceptFormat() string {
return request.AcceptFormat
}
func (request *baseRequest) GetHeaders() map[string]string {
return request.Headers
}
func (request *baseRequest) GetActionName() string {
return request.actionName
}
func (request *baseRequest) SetScheme(scheme string) {
request.Scheme = scheme
}
func (request *baseRequest) SetDomain(host string) {
request.Domain = host
}
func (request *baseRequest) GetScheme() string {
return request.Scheme
}
func (request *baseRequest) GetDomain() string {
return request.Domain
}
func (request *baseRequest) GetMethod() string {
return request.Method
}
func (request *baseRequest) GetFormParams() map[string]string {
return request.FormParams
}
func (request *baseRequest) GetQueryParams() map[string]string {
return request.QueryParams
}
func (request *baseRequest) SetHTTPSInsecure(isInsecure bool) {
request.isInsecure = &isInsecure
}
func (request *baseRequest) GetHTTPSInsecure() *bool {
return request.isInsecure
}
func (request *baseRequest) GetReadTimeout() time.Duration {
return request.ReadTimeout
}
func (request *baseRequest) GetConnectTimeout() time.Duration {
return request.ConnectTimeout
}
func (request *baseRequest) SetReadTimeout(readTimeOut time.Duration) {
request.ReadTimeout = readTimeOut
}
func (request *baseRequest) SetConnectTimeout(connectTimeOut time.Duration) {
request.ConnectTimeout = connectTimeOut
}
func (request *baseRequest) SetStringToSign(stringToSign string) {
request.stringToSign = stringToSign
}
func (request *baseRequest) addHeaderParam(key, val string) {
request.Headers[key] = val
}
func (request *baseRequest) addQueryParam(key, val string) {
request.QueryParams[key] = val
}
func (request *baseRequest) addFormParam(key, val string) {
request.FormParams[key] = val
}
func defaultBaseRequest() (request *baseRequest) {
request = &baseRequest{
Scheme: HTTP,
AcceptFormat: JSON,
Method: GET,
QueryParams: make(map[string]string),
Headers: map[string]string{
"gr-sdk-client": "golang/1.14",
"gr-sdk-invoke-type": "normal",
"Accept-Encoding": Json,
},
FormParams: make(map[string]string),
}
return
}
func InitParam(request AcsRequest) (err error) {
reflectValue := reflect.ValueOf(request).Elem()
reflectType := reflectValue.Type()
for i := 0; i < reflectType.NumField(); i++ {
field := reflectType.Field(i)
name, isContiansNameTag := field.Tag.Lookup("field")
fieldPosition, _ := field.Tag.Lookup("position")
log.Println(name, field)
if isContiansNameTag {
err = addParam(request, fieldPosition, name, reflectValue.Field(i).String())
}
}
return nil
}
func addParam(request AcsRequest, position, key, value string) (err error) {
if len(value) > 0 {
switch position {
case Header:
request.addHeaderParam(key, value)
case Query:
request.addQueryParam(key, value)
case Body:
request.addFormParam(key, value)
default:
errmsg := fmt.Sprintf("unsupport positions add param `%s`", position)
err = errors.New(errmsg)
}
}
return
}