109 lines
2.3 KiB
Go
109 lines
2.3 KiB
Go
package requests
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
type CommonRequest struct {
|
|
*baseRequest
|
|
|
|
Version string
|
|
ApiName string
|
|
Product string
|
|
ServiceCode string
|
|
|
|
// roa params
|
|
PathPattern string
|
|
PathParams map[string]string
|
|
|
|
Ontology AcsRequest
|
|
}
|
|
|
|
func NewCommonRequest() (request *CommonRequest) {
|
|
request = &CommonRequest{
|
|
baseRequest: defaultBaseRequest(),
|
|
}
|
|
request.Headers["x-sdk-invoke-type"] = "common"
|
|
request.PathParams = make(map[string]string)
|
|
return
|
|
}
|
|
|
|
func (request *CommonRequest) String() string {
|
|
request.TransToAcsRequest()
|
|
|
|
resultBuilder := bytes.Buffer{}
|
|
|
|
mapOutput := func(m map[string]string) {
|
|
if len(m) > 0 {
|
|
sortedKeys := make([]string, 0)
|
|
for k := range m {
|
|
sortedKeys = append(sortedKeys, k)
|
|
}
|
|
|
|
// sort 'string' key in increasing order
|
|
sort.Strings(sortedKeys)
|
|
|
|
for _, key := range sortedKeys {
|
|
resultBuilder.WriteString(key + ": " + m[key] + "\n")
|
|
}
|
|
}
|
|
}
|
|
|
|
// Request Line
|
|
resultBuilder.WriteString(fmt.Sprintf("%s %s %s/1.1\n", request.Method, request.BuildQueries(), strings.ToUpper(request.Scheme)))
|
|
|
|
// Headers
|
|
resultBuilder.WriteString("Host" + ": " + request.Domain + "\n")
|
|
mapOutput(request.Headers)
|
|
|
|
resultBuilder.WriteString("\n")
|
|
// Body
|
|
if len(request.Content) > 0 {
|
|
resultBuilder.WriteString(string(request.Content) + "\n")
|
|
} else {
|
|
mapOutput(request.FormParams)
|
|
}
|
|
|
|
return resultBuilder.String()
|
|
}
|
|
|
|
func (request *CommonRequest) TransToAcsRequest() {
|
|
if len(request.PathPattern) > 0 {
|
|
roaRequest := &RoaRequest{}
|
|
roaRequest.initWithCommonRequest(request)
|
|
request.Ontology = roaRequest
|
|
} else {
|
|
rpcRequest := &RpcRequest{}
|
|
rpcRequest.baseRequest = request.baseRequest
|
|
rpcRequest.product = request.Product
|
|
rpcRequest.version = request.Version
|
|
rpcRequest.locationServiceCode = request.ServiceCode
|
|
rpcRequest.actionName = request.ApiName
|
|
request.Ontology = rpcRequest
|
|
}
|
|
}
|
|
|
|
func (request *CommonRequest) BuildUrl() string {
|
|
return request.Ontology.BuildUrl()
|
|
}
|
|
|
|
func (request *CommonRequest) BuildQueries() string {
|
|
return request.Ontology.BuildQueries()
|
|
}
|
|
|
|
func (request *CommonRequest) GetBodyReader() io.Reader {
|
|
return request.Ontology.GetBodyReader()
|
|
}
|
|
|
|
func (request *CommonRequest) GetStyle() string {
|
|
return request.Ontology.GetStyle()
|
|
}
|
|
|
|
func (request *CommonRequest) addPathParam(key, value string) {
|
|
request.PathParams[key] = value
|
|
}
|