首页 阿里云SDK Go SDK 升级版 SDK 使用指南 SDK 客户端的初始化和请求方式

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 亦如此。

阿里云首页 阿里云SDK 相关技术圈