使用CommonRequest進行調用介紹。
當您要調用的某個產品的API沒有提供SDK時,可以採用泛用型的API調用方式(CommonRequest)。使用CommonRequest調用方式可實現任意OpenAPI介面的調用。
CommonRequest調用特點
CommonRequest的特點如下:
輕量:只需Core包即可發起調用,無需下載安裝各產品的SDK。
簡便:無需更新SDK即可調用最新發行的API。
快速迭代。
使用CommonRequest
阿里雲產品的API有RPC和RESTful兩種風格,不同風格的API的CommonRequest的調用方法也不同。
通常API參數中包含Action參數的是RPC風格,包含PathPattern參數的是RESTful風格。一般情況下,每個產品內,所有API的調用風格是統一的。每個API僅支援特定的一種風格調用,傳入錯誤的標識,可能會調用到其他API,或收到ApiNotFound
的錯誤資訊。
發起一次CommonRequest請求,您需要擷取以下幾個參數的值。您可以在文檔中心各產品的API文檔中擷取以下參數的值。此外,部分產品也可以通過OpenAPI 開發人員門戶來擷取API的參數資訊。
網域名稱(domain):該產品的服務地址。
API版本(version):該API的版本號碼,格式為YYYY-MM-DD。
介面資訊:要調用的介面名稱。
當調用的API為RPC風格(大部分阿里雲產品API為RPC風格,如ECS和RDS)時,需要擷取Action參數,使用
request.ApiName = "<Action>"
的方式來指定API名稱。例如RunInstances介面,在發起CommonRequest請求時,需要使用
request.ApiName = "RunInstances"
來指定API名稱。
當調用的API為RESTful風格(如Container Service)時,需要擷取PathPattern參數,使用
request.PathPattern = "<PathPattern>"
的方式來指定RESTful路徑。例如Container Service的查看所有叢集執行個體的API的PathPattern為
/clusters
,在發起CommonRequest請求時,要使用request.PathPattern = "/clusters"
指定RESTful路徑。
樣本:調用RPC風格的API
以下代碼展示了如何使用CommonRequest的方式調用ECS的DescribeInstanceStatus介面:
package main
import (
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"fmt"
)
func main() {
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", "{your_access_key_id}", "{your_access_key_secret}")
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Domain = "ecs.aliyuncs.com"
request.Version = "2014-05-26"
// 因為是RPC介面,因此需指定ApiName(Action)
request.ApiName = "DescribeInstanceStatus"
request.QueryParams["PageNumber"] = "1"
request.QueryParams["PageSize"] = "30"
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}
樣本:調用RESTful(ROA)風格的API
以下代碼展示了如何使用CommonRequest的方式調用Container Service的查看所有叢集執行個體介面:
package main
import (
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"fmt"
)
func main() {
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", "{your_access_key_id}", "{your_access_key_secret}")
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Domain = "cs.aliyuncs.com"
request.Version = "2015-12-15"
// 因為是Restful介面,因此需指定PathPattern
request.PathPattern = "/clusters"
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}