本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

泛化調用

更新時間:2025-03-26 19:20

阿里雲V1.0 SDK支援一種通用的方式調用OpenAPI,此方式被稱為泛化調用。本文將為您詳細介紹如何使用泛化調用訪問OpenAPI。

特點

  1. 輕量級:僅需安裝Core包即可調用所有OpenAPI,無需依賴各產品的獨立SDK。

  2. 快速迭代相容性:當雲產品尚未提供相應的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

以調用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" // 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, M)
  • 特點
  • 使用說明
  • 安裝核心SDK
  • 調用OpenAPI
  • 初始化請求用戶端
  • 配置OpenAPI資訊及請求參數
  • 發起請求
  • 程式碼範例
  • 樣本:調用RPC風格的API
  • 樣本:調用RESTful(ROA)風格的API
文檔反饋
phone 聯絡我們

立即和Alibaba Cloud在線服務人員進行交談,獲取您想了解的產品信息以及最新折扣。

alicare alicarealicarealicare