集成SDK

更新时间:

在调用OpenAPI时,建议采用在项目中集成SDK的方式。使用SDK可以简化开发流程,实现功能的快速集成,同时有效降低维护成本。本文将详细介绍如何在项目中安装SDK以及使用SDK开发。

重要

V1.0 Go SDK已停止支持,详情请参考宣布将于 2025 年 3 月 1 日终止对阿里云 V1.0 Golang SDK 支持,请使用V2.0 Go SDK

环境要求

Go 环境版本>= 1.10.x

安装SDK

由于在安装云产品V1.0 Go SDK时会自动安装核心SDK,所以在实际应用过程中仅需要安装云产品SDK即可。

云产品SDK

云产品SDK主要包含了调用OpenAPI所需的请求参数Request对象及返回结果Response对象。以云产品ECSSDK为例,您可以在Terminal或者命令行中执行以下安装命令:

go get github.com/aliyun/alibaba-cloud-sdk-go/services/ecs

V1.0 SDK的命名方式为github.com/aliyun/alibaba-cloud-sdk-go/services/${产品code}

核心SDK

核心SDK主要包含在调用OpenAPI时所需的Client对象、签名逻辑以及异常处理等功能。当您使用泛化调用时,仅需执行以下安装命令:

go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk

使用SDK

本文将以调用ECSDescribeInstances接口为例,为您分步介绍如何使用V1.0 SDK。

1. 初始化请求客户端

所有的OpenAPI均通过sdk包提供的Client发起调用,因此在调用OpenAPI之前,需要先进行客户端初始化。这里以使用AK初始化方式为例,更多客户端初始化方式请参见管理访问凭据

说明

示例采用读取环境变量的方式获取凭证,运行代码前需配置环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具体操作,请参见Linux、macOSWindows系统配置环境变量

import (
	"os"

	"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
	"github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
)

func main() {
	config := sdk.NewConfig()
	credential, err := credentials.NewStaticAKCredentialsProviderBuilder().
		WithAccessKeyId(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")).
		WithAccessKeySecret(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")).
		Build()
	if err != nil {
		panic(err)
	}
	// 初始化云产品客户端
	ecsClient, err := ecs.NewClientWithOptions("cn-hangzhou", config, credential)
	if err != nil {
		panic(err)
	}
}

2. 构造OpenAPI请求参数对象

可以使用云产品SDK中提供的请求参数对象封装请求参数。

说明

OpenAPI请求参数对象的命名方式为:<OpenAPI名称>Request

// 示例参数中有使用requests包,需要在import中添加:"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"

// 创建Request对象
request := ecs.CreateDescribeInstancesRequest()
request.InstanceIds = "[\"i-bp1dXXXXXXXXXXXX\"]"
request.PageSize = requests.Integer("100")
request.PageNumber = requests.Integer("1")

3. 发起请求

通过步骤1创建的请求客户端调用OpenAPI接口发起请求,该接口的参数为步骤2构造的Request对象。

response, err := ecsClient.DescribeInstances(request)
if err != nil {
	panic(err)
}
fmt.Print(response.GetHttpContentString())

完整示例代码

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
	"github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
)

func main() {
	config := sdk.NewConfig()
	credential, err := credentials.NewStaticAKCredentialsProviderBuilder().
		WithAccessKeyId(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")).
		WithAccessKeySecret(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")).
		Build()
	if err != nil {
		panic(err)
	}

	ecsClient, err := ecs.NewClientWithOptions("cn-hangzhou", config, credential)
	if err != nil {
		panic(err)
	}

	// 创建Request对象
	request := ecs.CreateDescribeInstancesRequest()
	request.InstanceIds = "[\"i-bp1dXXXXXXXXXXXX\"]"
	request.PageSize = requests.Integer("100")
	request.PageNumber = requests.Integer("1")

	response, err := ecsClient.DescribeInstances(request)
	if err != nil {
		panic(err)
	}
	fmt.Print(response.GetHttpContentString())
}

相关文档