129 lines
3.3 KiB
Go
129 lines
3.3 KiB
Go
|
package requests
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/errors"
|
||
|
"io"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type CommonRequest struct {
|
||
|
*baseRequest
|
||
|
|
||
|
Version string
|
||
|
ApiName string
|
||
|
Product 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()
|
||
|
request.BuildQueries()
|
||
|
request.BuildUrl()
|
||
|
|
||
|
resultBuilder := bytes.Buffer{}
|
||
|
|
||
|
mapOutput := func(m map[string]string) {
|
||
|
if len(m) > 0 {
|
||
|
for key, value := range m {
|
||
|
resultBuilder.WriteString(key + ": " + value + "\n")
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Request Line
|
||
|
resultBuilder.WriteString("\n")
|
||
|
resultBuilder.WriteString(fmt.Sprintf("%s %s %s/1.1\n", request.Method, request.GetQueries(), 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.Version) == 0 {
|
||
|
errors.NewClientError(errors.MissingParamErrorCode, "Common request [version] is required", nil)
|
||
|
}
|
||
|
if len(request.ApiName) == 0 && len(request.PathPattern) == 0 {
|
||
|
errors.NewClientError(errors.MissingParamErrorCode, "At least one of [ApiName] and [PathPattern] should has a value", nil)
|
||
|
}
|
||
|
if len(request.Domain) == 0 && len(request.Product) == 0 {
|
||
|
errors.NewClientError(errors.MissingParamErrorCode, "At least one of [Domain] and [Product] should has a value", nil)
|
||
|
}
|
||
|
|
||
|
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.actionName = request.ApiName
|
||
|
request.Ontology = rpcRequest
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
func (request *CommonRequest) BuildUrl() string {
|
||
|
if len(request.Port) > 0 {
|
||
|
return strings.ToLower(request.Scheme) + "://" + request.Domain + ":" + request.Port + request.BuildQueries()
|
||
|
}
|
||
|
|
||
|
return strings.ToLower(request.Scheme) + "://" + request.Domain + request.BuildQueries()
|
||
|
}
|
||
|
|
||
|
func (request *CommonRequest) BuildQueries() string {
|
||
|
return request.Ontology.BuildQueries()
|
||
|
}
|
||
|
|
||
|
func (request *CommonRequest) GetUrl() string {
|
||
|
if len(request.Port) > 0 {
|
||
|
return strings.ToLower(request.Scheme) + "://" + request.Domain + ":" + request.Port + request.GetQueries()
|
||
|
}
|
||
|
|
||
|
return strings.ToLower(request.Scheme) + "://" + request.Domain + request.GetQueries()
|
||
|
}
|
||
|
|
||
|
func (request *CommonRequest) GetQueries() string {
|
||
|
return request.Ontology.GetQueries()
|
||
|
}
|
||
|
|
||
|
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
|
||
|
}
|