SDK 客户端的初始化和请求方式
SDK 客户端初始化
新版 SDK 中因为具备完整的参数处理、返回值处理以及请求逻辑,所以可以给不同云产品的 SDK 生成不同的 Client 并包含其产品下所有的 OpenAPI 请求方法,可以使不同云产品之间的身份及鉴权信息隔离,使用上更加安全,下面是新版 SDK 初始化的示例:
func CreateClient(AccessKeyId *string, AccessKeySecret *string) (_result *ecs20140526.Client, err error) {
config := &openapi.Config{
AccessKeyId: AccessKeyId,
AccessKeySecret: AccessKeySecret,
}
// 设置 RegionId,获取访问地址。也可以直接设置 endpoint 指定请求地址。
config.RegionId = tea.String("<RegionId>")
// config.Endpoint = tea.String("ecs-cn-hangzhou.aliyuncs.com")
client, err := ecs20140526.NewClient(config)
if err != nil {
panic(err)
}
}
OpenAPI 请求方式
升级版 SDK 中每个产品的 Client 包含了所有的 OpenAPI,所以可以指定 OpenAPI 请求方法来请求,其方法名对应 OpenAPI 首字母小写,一般有三个:
可以不用传入运行参数的请求方法。
func main() {
config := &openapi.Config{
// 您的AccessKey ID
AccessKeyId: tea.String("<AccessId>"),
// 您的AccessKey Secret
AccessKeySecret: tea.String("<AccessSecret>"),
// 访问的 Region
RegionId: tea.String("<RegionId>")
}
client, err := ecs20140526.NewClient(config)
if err != nil {
panic(err)
}
describeRegionsRequest := &ecs20140526.DescribeRegionsRequest{}
resp, err := client.DescribeRegions(describeRegionsRequest)
if err != nil {
panic(err)
}
// response 包含服务端响应的 body 和 headers
body, err := json.Marshal(resp.Body)
if err != nil {
panic(err)
}
headers, err := json.Marshal(resp.Headers)
if err != nil {
panic(err)
}
fmt.Printf("body: %s\n", string(body))
fmt.Printf("header: %s\n", string(headers))
}
需要传入运行参数的请求方法。
func main() {
config := &openapi.Config{
// 您的AccessKey ID
AccessKeyId: tea.String("<AccessId>"),
// 您的AccessKey Secret
AccessKeySecret: tea.String("<AccessSecret>"),
// 访问的 Region
RegionId: tea.String("<RegionId>")
}
client, err := ecs20140526.NewClient(config)
if err != nil {
panic(err)
}
describeRegionsRequest := &ecs20140526.DescribeRegionsRequest{}
// 创建RuntimeObject实例并设置运行参数。
runtime := &util.RuntimeOptions{}
runtime.ReadTimeout = tea.Int(10000)
resp, err := client.DescribeRegionsWithOptions(describeRegionsRequest, runtime)
if err != nil {
panic(err)
}
// response 包含服务端响应的 body 和 headers
body, err := json.Marshal(resp.Body)
if err != nil {
panic(err)
}
headers, err := json.Marshal(resp.Headers)
if err != nil {
panic(err)
}
fmt.Printf("body: %s\n", string(body))
fmt.Printf("header: %s\n", string(headers))
}
需要进行文件上传的请求方法,该方法默认需要传入运行时参数,这种方法只有需要用到文件上传的 OpenAPI 才会具备。
func main() {
config := &openapi.Config{
// 您的AccessKey ID
AccessKeyId: tea.String("<AccessId>"),
// 您的AccessKey Secret
AccessKeySecret: tea.String("<AccessSecret>"),
// 访问的 Region
RegionId: tea.String("<RegionId>")
}
client, err := facebody20191230.NewClient(config)
if err != nil {
panic(err)
}
f, err := os.Open("本地文件路径")
if err != nil {
return err
}
request := &facebody20191230.DetectBodyCountAdvanceRequest{}
request.ImageURLObject(f);
// 创建RuntimeObject实例并设置运行参数。
runtime := &util.RuntimeOptions{}
runtime.ReadTimeout = tea.Int(10000)
resp, err := client.DetectBodyCountAdvance(describeRegionsRequest, runtime)
if err != nil {
panic(err)
}
// response 包含服务端响应的 body 和 headers
body, err := json.Marshal(resp.Body)
if err != nil {
panic(err)
}
headers, err := json.Marshal(resp.Headers)
if err != nil {
panic(err)
}
fmt.Printf("body: %s\n", string(body))
fmt.Printf("header: %s\n", string(headers))
}
说明
每个接口 API 都有独立的 Request ,命名方式为 ${API}${Request} ,例如 DescribeRegionRequest。Response 亦如此。