泛化调用
阿里云V1.0 SDK支持一种通用的方式调用OpenAPI,此方式被称为泛化调用。本文将为您详细介绍如何使用泛化调用访问OpenAPI。
特点
轻量级:仅需安装Core包即可调用所有OpenAPI,无需依赖各产品的独立SDK。
快速迭代兼容性:当云产品尚未提供相应的SDK,或当新API发布但SDK未能及时更新时,可以使用泛化调用。这样,无需等待SDK的更新,即可及时调用最新发布的API接口。
更多介绍,请参见泛化调用与特化调用。
使用说明
在使用泛化调用之前,必须手动获取并配置OpenAPI的版本号、请求路径、参数类型等元数据信息。可以通过查看OpenAPI元数据来获取有关OpenAPI的API风格、请求参数、资源路径等相关信息。
安装核心SDK
在Terminal中执行以下命令安装核心SDK。
go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk
调用OpenAPI
初始化请求客户端
通过在aliyunsdkcore
包中创建client
模块以初始化请求客户端,并通过该Client
发起OpenAPI
调用。此处仅列举使用AccessKey(简称:AK)
初始化客户端的方式,更多初始化方式请参见管理访问凭据。
为了避免凭据泄露,常见的方案是将其写入到环境变量中,具体操作请参见在Linux、macOS和Windows系统配置环境变量。
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
)
// 使用 AccessKey 直接初始化。os.Getenv表示从环境变量中获取访问密钥
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}
配置OpenAPI信息及请求参数
通过alibaba-cloud-sdk-go
包中的request
模块来配置OpenAPI
所需的基本信息及请求参数。
request
的核心作用是通过标准化的请求配置流程,将原始API元数据(如版本号、路径、参数类型)和请求参数转化为有效的HTTP请求,最终返回原始响应数据。参数传递方式根据API风格和接口设计选择。
import (
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)
// 创建CommonRequest对象并配置OpenAPI基本信息和请求参数。
request := requests.NewCommonRequest()
// 1.配置OpenApi基本信息
request.Domain = "ecs.aliyuncs.com" // API服务地址
request.Version = "2014-05-26" // API版本号
// request 参数中包含ApiName参数的是RPC风格,而包含PathPattern参数的是ROA风格。
// 若传入错误的标识,可能会导致调用到其他API或收到ApiNotFound的错误信息。
request.ApiName = "DescribeRegions" // API名称,当调用RPC风格API时,必须配置ApiName()指定接口名称
// request.PathPattern = "/" // API资源路径,当调用ROA风格API时,必须配置PathPattern()指定完整资源路径。
request.Method = "POST" // 请求方式。
request.Scheme = "https" // 请求协议:HTTPS或HTTP,建议使用HTTPS。
// 2.配置请求参数
// 方式一:设置查询参数(query)
request.QueryParams["InstanceChargeType"] = "PostPaid"
// 方式二:设置请求体(body)reqBodyType的值为json格式
// jsonBody := `{"InstanceChargeType": "PostPaid"}`
// request.Content = []byte(jsonBody)
// request.SetContentType("application/json")
// 方式三:设置请求体(body)reqBodyType的值为byte格式
// bodyBytes := []byte("InstanceChargeType:PostPaid")
// request.Content = bodyBytes
// request.SetContentType("application/octet-stream")
// 方式四:设置请求体(body)reqBodyType的值为form-data格式
// request.FormParams["InstanceChargeType"] = "PostPaid"
发起请求
通过client
调用ProcessCommonRequest发起请求。
// 发起请求
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
// 解析响应内容(JSON 格式),包含RequestId以及OpenAPI的返回参数。
fmt.Print(response.GetHttpContentString())
代码示例
示例:调用RPC风格的API
以调用ECS的DescribeRegions
接口为例,展示如何使用泛化调用方式。
package main
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)
func main() {
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Domain = "ecs.aliyuncs.com" // API服务地址
request.Version = "2014-05-26" // API版本号
// request 参数中包含ApiName参数的是RPC风格,而包含PathPattern参数的是ROA风格。
// 若传入错误的标识,可能会导致调用到其他API或收到ApiNotFound的错误信息。
request.ApiName = "DescribeRegions" // API名称,当调用RPC风格API时,必须配置ApiName()指定接口名称
request.Method = "POST" // 请求方式
// request.PathPattern = "/" // API资源路径,当调用ROA风格API时,必须配置PathPattern()指定完整资源路径。
request.Scheme = "https" // 请求协议:HTTPS或HTTP,建议使用HTTPS。
request.QueryParams["InstanceChargeType"] = "PostPaid"
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}
示例:调用RESTful(ROA)风格的API
以调用容器服务查询集群列表信息DescribeClustersV1
接口为例,展示如何使用泛化调用。
package main
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)
func main() {
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Domain = "cs.aliyuncs.com" // API服务地址
request.Version = "2015-12-15" // API版本号
// 因为是Restful接口,因此需指定PathPattern
request.PathPattern = "/api/v1/clusters" // API资源路径,当调用ROA风格API时,必须配置set_uri_pattern()指定完整资源路径。从OpenAPI元数据中data.path获取资源路径。
request.Method = "GET" // 请求方式
request.Scheme = "https" // 请求协议:HTTPS或HTTP,建议使用HTTPS。
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}
- 本页导读 (1)
- 特点
- 使用说明
- 安装核心SDK
- 调用OpenAPI
- 初始化请求客户端
- 配置OpenAPI信息及请求参数
- 发起请求
- 代码示例
- 示例:调用RPC风格的API
- 示例:调用RESTful(ROA)风格的API