全部產品
Search
文件中心

Alibaba Cloud SDK:使用CommonRequest進行調用

更新時間:Jul 01, 2024

使用CommonRequest進行調用介紹。

說明

當您要調用的某個產品的API沒有提供SDK時,可以採用泛用型的API調用方式(CommonRequest)。使用CommonRequest調用方式可實現任意OpenAPI介面的調用。

CommonRequest調用特點

CommonRequest的特點如下:

  1. 輕量:只需Core包即可發起調用,無需下載安裝各產品的SDK。

  2. 簡便:無需更新SDK即可調用最新發行的API。

  3. 快速迭代。

使用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())
}