すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud SDK:汎用呼び出し

最終更新日:Jun 19, 2025

Alibaba Cloud SDK V1.0 for Go は、汎用 API 呼び出しをサポートしています。このトピックでは、Alibaba Cloud SDK V1.0 for Go を使用して汎用呼び出しを行う方法について説明します。

特徴

  1. 軽量:Alibaba Cloud SDK V1.0 for Go を使用すると、各サービスの SDK をインストールする必要なく、Alibaba Cloud SDK のコアライブラリのみをインストールすることで、すべての API 操作を呼び出すことができます。

  2. 迅速な反復と互換性:クラウドサービスが SDK を提供していない場合、または SDK が最新の API 操作用に更新されていない場合、汎用呼び出しを行うことができます。この方法では、SDK の更新を待つことなく、最新の API 操作を呼び出すことができます。

詳細については、「汎用呼び出しと専用呼び出し」をご参照ください。

使用上の注意

汎用呼び出しを行う前に、API バージョン、リクエスト URL、パラメータータイプなど、必要なメタデータを手動で取得して指定します。詳細については、「API メタデータ」をご参照ください。

Alibaba Cloud SDK V1.0 for Go のコアライブラリをインストールする

ターミナルで次のコマンドを実行して、Alibaba Cloud SDK V1.0 for Go のコアライブラリをインストールします。

go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk

API 操作を呼び出す

リクエストクライアントを初期化する

aliyunsdkcore パッケージで、client モジュールを作成してリクエストクライアントを初期化し、client を使用して API 操作を呼び出します。この例では、AccessKey ペアを使用してリクエストクライアントを初期化します。詳細については、「アクセス認証情報を管理する」をご参照ください。

説明

AccessKey の漏洩を防ぐために、AccessKey ペアを環境変数に記録できます。詳細については、「Linux、macOS、および Windows で環境変数を構成する」をご参照ください。

import (
	"fmt"
	"os"
	"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
)

// AccessKey ペアを使用して、リクエストクライアントを直接初期化します。 os.Getenv は、AccessKey ID と AccessKey シークレットが環境変数から取得されることを示します。
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)
	}

API 操作情報とリクエストパラメーターを構成する

CommonRequest を使用して、API 操作の共通リクエストパラメーターと操作固有のパラメーターを構成します。共通リクエストパラメーターの詳細については、「詳細設定」をご参照ください。

説明

CommonRequest モジュールは、バージョン番号、URL、パラメータータイプなどの API メタデータを、標準のリクエスト構成プロセスを通じて有効な HTTP リクエストに変換し、元のレスポンスデータを返します。パラメーターの受け渡し方法は、API のスタイルと設計によって決まります。

操作固有のパラメーター

リクエストパラメーターの受け渡し方法は、API 操作のメタデータによって決まります。たとえば、DescribeInstanceStatus API 操作は、メタデータ{"name":"RegionId","in":"query",...}} として定義されています。この場合、"in":"query" は、リージョン ID(RegionId)を QueryParams["key"] = "value" で渡す必要があることを示します。

シナリオ

パラメーターの受け渡し方法

"in":"query"

QueryParams["key"] = "value"

説明

一連のキーと値のペアを指定するには、QueryParams["key.1"] = "value1"、

QueryParams["key.2"] = "value2",...

"in":"body" または "in": "formData"

FormParams["key"] = "value"

説明

リクエストパラメーターが文字列を指定していない場合は、パラメーター値を JSON 文字列に変換し、その文字列をパラメーター値として指定します。

        // 2. CommonRequest オブジェクトを作成し、API 操作の基本情報とリクエストパラメーターを構成します。
        request := requests.NewCommonRequest()
        // 2.1 API 操作の基本情報を構成します。
	request.Domain = "ecs-cn-hangzhou.aliyuncs.com" // API のエンドポイント
	request.Version = "2014-05-26" // API のバージョン番号
	request.ApiName = "DescribeInstanceStatus" // API 操作の名前。 RPC スタイルの API 操作を呼び出すときは、ApiName()を構成して API 操作の名前を指定する必要があります。
	request.Method = "POST" // リクエストメソッド
	request.Scheme = "https" // リクエストプロトコル。有効な値:HTTP および HTTPS。 HTTPS を使用することをお勧めします。
	// request.PathPattern = "/" // リソースパス。 ROA スタイルの API 操作で必要です。 RPC スタイルの API 操作には、このパラメーターを構成しないでください。

        // 2.2 リクエストパラメーターを構成します。
	// シナリオ 1:QueryParams["key"] = "value" の形式でクエリパラメーターを構成します。
	instanceIds := []string{
		"i-bp1axhql4dqXXXXXXXX",
		"i-bp124uve8zqXXXXXXXX",
	}
	request.QueryParams["RegionId"] = "cn-hangzhou"
	for i, id := range instanceIds {
	request.QueryParams[fmt.Sprintf("InstanceId.%d", i+1)] = id
	}

	// シナリオ 2:FormParams["key"] = "value" の形式でボディパラメーターを構成します。
	// request.FormParams["key1"] = "value1"
	// request.FormParams["key2"] = "value2"
	// request.FormParams["key3"] = "value3"

リクエストを開始する

client を使用して、ProcessCommonRequest 関数を呼び出すことによってリクエストを開始します。

// リクエストを開始します。
response, err := client.ProcessCommonRequest(request)
	if err != nil {
		panic(err)
	}
	// JSON 形式のレスポンスコンテンツを解析します。これには、リクエスト ID と API 操作のレスポンスパラメーターが含まれます。
	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-cn-hangzhou.aliyuncs.com"
	request.Version = "2014-05-26"
	request.ApiName = "DescribeInstanceStatus"
	request.Method = "POST"
	request.Scheme = "HTTPS"

	instanceIds := []string{
		"i-bp1axhql4dqXXXXXXXX",
		"i-bp124uve8zqXXXXXXXX",
	}
	request.QueryParams["RegionId"] = "cn-hangzhou"
	for i, id := range instanceIds {
		request.QueryParams[fmt.Sprintf("InstanceId.%d", i+1)] = id
	}
	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 操作を呼び出す

この例では、Container Service for Kubernetes(ACK)の 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 API です。したがって、PathPattern フィールドを指定する必要があります。
	request.PathPattern = "/api/v1/clusters" // API 操作の URL。 ROA スタイルの API 操作を呼び出すときは、set_uri_pattern() を構成して API 操作の完全な URL を指定する必要があります。API 操作の URL は、API メタデータから取得できます。
	request.Method = "GET" // リクエストメソッド。
	request.Scheme = "https"  // リクエストプロトコル。有効な値:HTTP および HTTPS。 HTTPS を使用することをお勧めします。

	response, err := client.ProcessCommonRequest(request)
	if err != nil {
		panic(err)
	}
	fmt.Print(response.GetHttpContentString())
}

よくある質問

「SDK.ServerError MissingParameter このリクエストの処理に必須の入力パラメーター「AccessKeyId」が指定されていません」というエラーメッセージが返された場合はどうすればよいですか?

原因:AccessKey ペアが正しく構成されていません。

解決策:

  1. 次のコマンドを実行して、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されているかどうかを確認します。

    Linux/macOS

    echo $ALIBABA_CLOUD_ACCESS_KEY_ID
    echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET

    Windows

    echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
    echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%

    有効な AccessKey ペアが返された場合、環境変数は正しく構成されています。 AccessKey ペアが返されない場合、または無効な AccessKey ペアが返された場合は、必要に応じて環境変数を構成します。詳細については、「Linux、macOS、および Windows で環境変数を構成する」をご参照ください。

  2. コードで AccessKey ペアに関連するエラーを確認します。

    エラーリクエストの例:

    client, err := sdk.NewClientWithAccessKey("<RegionId>",
    		os.Getenv("yourAccessKeyID"),
    		os.Getenv("yourAccessKeySecret"))
    	if err != nil {
    		panic(err)
    	}
    説明

    上記のエラーリクエストの例では、os.Getenv()の入力値が AccessKey ペアとして使用されています。ただし、この関数は環境変数から値を読み取るために使用されます。マシンで環境変数名を ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET として指定した後、os.Getenv は環境変数から値を読み取ることができます。

    成功リクエストの例:

    client, err := sdk.NewClientWithAccessKey("<RegionId>",
    		os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
    		os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
    	if err != nil {
    		panic(err)
    	}