goProject/trunk/framework/mqMgr/model/common_request.go

110 lines
4.1 KiB
Go
Raw Normal View History

2025-01-06 16:01:02 +08:00
/*
请求结构简介
最近更新时间2019-08-01 19:14:44
编辑 查看pdf
在这篇文章中
服务地址
通信协议
请求方法
请求参数
字符编码
对腾讯云的 API 接口的调用是通过向腾讯云 API 的服务端地址发送请求并按照接口说明在请求中加入相应的请求参数来完成的腾讯云 API 的请求结构由服务地址通信协议请求方法请求参数和字符编码组成具体描述如下
服务地址
腾讯云 API 的服务接入地址与具体模块相关详细请参见各接口相关描述
通信协议
腾讯云 API 的大部分接口都通过 HTTPS 进行通信为您提供高安全性的通信通道
请求方法
腾讯云 API 同时支持 POST GET 请求
注意
POST GET 请求不能混合使用若使用 GET 方式则参数均从 Querystring 取得
若使用 POST 方式则参数均从 Request Body 中取得 Querystring 中的参数将忽略
两种请求方式的参数格式规则相同一般情况下使用 GET 请求当参数字符串过长时推荐使用 POST
如果用户的请求方法是 GET则对所有请求参数值均需要做 URL 编码若为 POST则无需对参数编码
GET 请求的最大长度根据不同的浏览器和服务器设置有所不同例如传统 IE 浏览器限制为 2KFirefox 限制为 8K对于一些参数较多长度较长的 API 请求建议您使用 POST 方法以免在请求过程中会由于字符串超过最大长度而导致请求失败
对于 POST 请求您需要使用 x-www-form-urlencoded 的形式传参因为云 API 侧是从 $_POST 中取出请求参数的
请求参数
腾讯云 API 的每个请求都需要指定两类参数公共请求参数以及接口请求参数其中公共请求参数是每个接口都要用到的请求参数具体可参见 公共请求参数而接口请求参数是各个接口所特有的具体见各个接口的请求参数描述
字符编码
腾讯云 API 的请求及返回结果均使用 UTF-8 字符集进行编码
*/
package model
import (
"fmt"
"time"
"goutil/mathUtil"
)
// CommonRequest 公共请求参数对象
type CommonRequest struct {
// Action 指令接口名称(必须)
Action string
// 地域参数(必须)
Region string
// Timestamp 当前UNIX时间戳(必须)
Timestamp uint64
// Nonce 随机正整数(必须)
Nonce uint32
// SecretId 在云API密钥上申请的标识身份的SecretId(必须)
SecretId string
// 请求签名,用来验证此次请求的合法性,需要用户根据实际的输入参数计算得出。
Signature string
// 签名方式,目前支持 HmacSHA256 和 HmacSHA1。只有指定此参数为 HmacSHA256 时,才使用 HmacSHA256 算法验证签名,其他情况均使用 HmacSHA1 验证签名。
SignatureMethod string
// 队列名称(此属性虽然不是API文档中的公共属性但是在队列模型中确实事实上的公共属性所以将其转移到此处)
queueName string
}
// AssembleParamMap 组装请求参数字典
// 返回值
// map[string]interface{}:请求参数字
func (this *CommonRequest) AssembleParamMap() map[string]string {
result := make(map[string]string)
// 组装参数
result["Action"] = this.Action
result["Region"] = this.Region
result["Timestamp"] = fmt.Sprintf("%d", this.Timestamp)
result["Nonce"] = fmt.Sprintf("%d", this.Nonce)
result["SecretId"] = this.SecretId
result["SignatureMethod"] = this.SignatureMethod
result["queueName"] = this.queueName
return result
}
// NewCommonRequest 新建公共请求参数对象
// 参数
// action:指令接口名称
// region:地域
// secretId:在云API密钥上申请的标识身份的SecretId
// queueName:队列名称
// 返回值
// *CommonRequest:公共请求参数对象
func NewCommonRequest(action, region, secretId, queueName string) *CommonRequest {
return &CommonRequest{
Action: action,
Region: region,
Timestamp: uint64(time.Now().Unix()),
Nonce: mathUtil.GetRand().Uint32(),
SecretId: secretId,
SignatureMethod: "HmacSHA256",
queueName: queueName,
}
}