特點
輕量級:僅需安裝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)
初始化用戶端的方式,更多初始化方式請參見管理訪問憑據。
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
)
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"
)
request := requests.NewCommonRequest()
request.Domain = "ecs.aliyuncs.com"
request.Version = "2014-05-26"
request.ApiName = "DescribeRegions"
request.Method = "POST"
request.Scheme = "https"
request.QueryParams["InstanceChargeType"] = "PostPaid"
發起請求
通過client
調用ProcessCommonRequest發起請求。
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
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"
request.Version = "2014-05-26"
request.ApiName = "DescribeRegions"
request.Method = "POST"
request.Scheme = "https"
request.QueryParams["InstanceChargeType"] = "PostPaid"
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}
樣本:調用RESTful(ROA)風格的API
以調用Container Service查詢叢集列表資訊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"
request.Version = "2015-12-15"
request.PathPattern = "/api/v1/clusters"
request.Method = "GET"
request.Scheme = "https"
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}