Alibaba Cloud SDK for Java V2.0 は汎用 API 呼び出しをサポートしています。このトピックでは、Alibaba Cloud SDK for Java V2.0 を使用して汎用呼び出しを行う方法について説明します。
特徴
軽量: Alibaba Cloud SDK V2.0 for Go を使用すると、各サービスの SDK をインストールする必要なく、Alibaba Cloud SDK のコアライブラリのみをインストールすることで API 操作を呼び出すことができます。
使いやすさ:共通のリクエストパラメータを作成し、共通のクライアントを使用してリクエストを開始するだけで済みます。レスポンスは共通の形式で返されます。
詳細については、「汎用呼び出しと専用呼び出し」をご参照ください。
使用上の注意
汎用呼び出しを行う前に、API 操作のメタデータ を参照して、API スタイル、リクエストパラメータ、URL を取得することをお勧めします。
Alibaba Cloud SDK V2.0 for Go のコアライブラリのインストール
ターミナルで次のコマンドを実行して、Alibaba Cloud SDK V2.0 for Go のコアライブラリをインストールします。
go get github.com/alibabacloud-go/darabonba-openapi/v2/client
API 操作の呼び出し
リクエストクライアントの初期化
darabonba-openapi/v2/client オブジェクトを作成してリクエストクライアントを初期化し、そのクライアントを使用して API 操作を呼び出します。クライアントを初期化する際に、Credentials ツールを使用することもできます。 Credentials ツールの詳細については、「アクセス認証情報の管理」をご参照ください。
import (
"fmt"
"os"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
"github.com/alibabacloud-go/tea/tea"
"github.com/aliyun/credentials-go/credentials"
)
// os.Getenv は、AccessKey ID と AccessKey Secret が環境変数から取得されることを示します。
config := &openapi.Config{
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
// サービスのエンドポイントを指定します。
config.Endpoint = tea.String("ecs-cn-hangzhou.aliyuncs.com")
// クライアントを初期化して返します。
client, err := openapi.NewClient(config)
if err != nil {
panic(err)
}
// デフォルトの認証情報を使用してクライアントを初期化します。
// credentialClient, _err := credentials.NewCredential(nil)
// if _err != nil {
// panic(_err)
// }
// config := &openapi.Config{
// Credential: credentialClient,
// }
// config.Endpoint = tea.String("ecs-cn-hangzhou.aliyuncs.com")
// client, err := openapi.NewClient(config)
// if err != nil {
// panic(_err)
// }API 操作に関する情報の構成
openapi.Params を使用して、API スタイル、API バージョン、リクエストメソッドなど、API 操作の基本情報を構成します。次の例では、DescribeInstanceTypeFamilies 操作が呼び出されます。
// API 操作の基本情報を構成します。
params := &openapi.Params{
// API 操作に必要な Action や Version などのパラメータを指定します。
Action: tea.String("DescribeInstanceTypeFamilies"), // API 操作
Version: tea.String("2014-05-26"), // API 操作のバージョン番号
Protocol: tea.String("HTTPS"), // リクエストプロトコル。有効な値: HTTP および HTTPS 。 HTTPS を使用することをお勧めします。
Method: tea.String("POST"), // リクエストメソッド
AuthType: tea.String("AK"), // 認証タイプ。デフォルトタイプを使用します。API 操作が匿名リクエストをサポートしている場合は、Anonymous パラメータを指定して匿名リクエストを開始できます。
Style: tea.String("RPC"), // API スタイル。リモートプロシージャコール ( RPC ) やリソース指向アーキテクチャ ( ROA ) など。
Pathname: tea.String("/"), // API 操作の URL 。 RPC スタイルの操作のデフォルトパスは / です。ROA スタイルの操作の URL は、API メタデータの data.path パラメータから取得できます。
ReqBodyType: tea.String("json"), // リクエストボディのタイプ。有効な値: byte 、 json 、 formData 。
BodyType: tea.String("json"), // レスポンス形式。有効な値: json 。
}リクエストパラメータの構成
openapi.OpenApiRequest を使用してリクエストパラメータを構成します。リクエストパラメータは、クエリ文字列、ボディ、またはストリームで渡すことができます。API 操作のメタデータに基づいて、リクエストパラメータを渡すメソッドを選択します。たとえば、DescribeInstanceTypeFamilies API 操作の RegionId リクエストパラメータは、メタデータ で {"name":"RegionId","in":"query",...}} として定義されています。"in":"query" は、RegionId パラメータがクエリ文字列で渡されることを示します。
パラメータの渡し方 | 説明 |
クエリ | メタデータで |
ボディ | メタデータで |
ストリーム | ファイルをアップロードする必要がある場合は、Stream パラメータを構成することでファイルストリームを渡すことができます。 |
// シナリオ 1:クエリ文字列を構成する。
query := map[string]interface{}{
"RegionId": tea.String("cn-hangzhou"),
}
// リクエストを作成し、必要なパラメータを構成します。
request := &openapi.OpenApiRequest{
Query: openapiutil.Query(query),
}
// シナリオ 2:ボディを構成し、reqBodyType を json に設定する。
// reqBody := map[string]interface{}{
// "param1": tea.String("value1"),
// "param2": tea.String("value2"),
// }
// // API リクエストを作成し、必要なパラメータを設定します。
// request := &openapi.OpenApiRequest{
// Body: openapiutil.Query(reqBody),
// }
// シナリオ 3:ボディを構成し、reqBodyType を formData に設定する。
// reqForm := map[string]interface{}{
// "param1": tea.String("value1"),
// "param2": tea.String("value2"),
// }
// request := &openapi.OpenApiRequest{
// // フォームパラメータを URL エンコードされた文字列に変換します。
// Body: reqForm,
// }
// シナリオ 4:Stream パラメータを使用してファイルストリームを渡す
// request := &openapi.OpenApiRequest{
// Stream: '<FILE_STREAM>', // <FILE_STREAM> を渡すファイルストリームに置き換えます。
// }リクエストの開始
CallApi 関数を呼び出すことによって、client を使用してリクエストを開始します。API 操作を呼び出すときに、タイムアウトパラメータやプロキシパラメータなどのランタイムパラメータを指定できます。詳細については、「詳細設定」をご参照ください。
// ランタイムオプションを構成します。
runtime := &util.RuntimeOptions{}
// SSL 証明書関連のエラーを無視します。
// runtime.IgnoreSSL = tea.Bool(true)
// RuntimeOptions を使用してプロキシを構成します。
// runtime.HttpProxy = tea.String("http://127.0.0.1:9898")
// runtime.HttpsProxy = tea.String("http://user:password@127.0.0.1:8989")
// runtime.NoProxy = tea.String("127.0.0.1,localhost")
// タイムアウト期間を構成します。単位:ミリ秒。
// runtime.ConnectTimeout = tea.Int(10000) // 接続リクエストのタイムアウト期間を 10 秒に設定します。
// runtime.ReadTimeout = tea.Int(10000) // 読み取りリクエストのタイムアウト期間を 10 秒に設定します。
// API 操作を呼び出し、レスポンスを返します。
response, err := client.CallApi(params, request, runtime)
if err != nil {
panic(err)
}
// レスポンスは MAP タイプで、レスポンスボディ、レスポンスヘッダー、 HTTP ステータスコードが含まれています。
fmt.Println(response["body"])サンプルコード
例: RPC スタイルの API 操作の呼び出し
この例では、ECS の DescribeRegions 操作を呼び出して、操作の汎用呼び出しを行う方法を示します。
package main
import (
"fmt"
"os"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
openapiutil "github.com/alibabacloud-go/openapi-util/service"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
)
func main() {
// 環境変数から AccessKey ID と AccessKey Secret を取得します。
config := &openapi.Config{
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
// サービスのエンドポイントを指定します。
config.Endpoint = tea.String("ecs-cn-hangzhou.aliyuncs.com")
// クライアントを初期化して返します。
client, err := openapi.NewClient(config)
if err != nil {
panic(err)
}
params := &openapi.Params{
// API 操作に必要な Action や Version などのパラメータを指定します。
Action: tea.String("DescribeInstanceTypeFamilies"), // API 操作
Version: tea.String("2014-05-26"), // API 操作のバージョン番号
Protocol: tea.String("HTTPS"), // リクエストプロトコル。有効な値: HTTP および HTTPS 。 HTTPS を使用することをお勧めします。
Method: tea.String("POST"), // リクエストメソッド
AuthType: tea.String("AK"), // 認証タイプ。デフォルトタイプを使用します。API 操作が匿名リクエストをサポートしている場合は、Anonymous パラメータを指定して匿名リクエストを開始できます。
Style: tea.String("RPC"), // API スタイル。 RPC や ROA など。
Pathname: tea.String("/"), // API 操作のパス。 RPC スタイルの API 操作のデフォルトパスは / です。
ReqBodyType: tea.String("json"), // リクエストボディの形式。
BodyType: tea.String("json"), // レスポンスボディの形式。
}
// クエリパラメータを構成します。
query := map[string]interface{}{
"RegionId": tea.String("cn-hangzhou"),
}
// ランタイムオプションを構成します。
runtime := &util.RuntimeOptions{}
// API リクエストを作成し、パラメータを構成します。
request := &openapi.OpenApiRequest{
Query: openapiutil.Query(query),
}
// API 操作を呼び出し、レスポンスを返します。
response, err := client.CallApi(params, request, runtime)
if err != nil {
panic(err)
}
// レスポンスは MAP タイプで、レスポンスボディ、レスポンスヘッダー、 HTTP ステータスコードが含まれています。
fmt.Println(response["body"])
}
例: RESTful スタイル ( ROA スタイル ) の API 操作の呼び出し
この例では、Container Service for Kubernetes ( ACK ) の DescribeClustersV1 操作を呼び出して、操作の汎用呼び出しを行う方法を示します。
package main
import (
"fmt"
"os"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
openapiutil "github.com/alibabacloud-go/openapi-util/service"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
)
func main() {
// 環境変数から AccessKey ID と AccessKey Secret を取得します。
config := &openapi.Config{
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
// サービスのエンドポイントを指定します。詳細については、https://api.aliyun.com/product/CS をご覧ください。
config.Endpoint = tea.String("cs.cn-qingdao.aliyuncs.com")
client, err := openapi.NewClient(config)
if err != nil {
panic(err)
}
params := &openapi.Params{
// 呼び出す操作。
Action: tea.String("DescribeClustersV1"),
// API 操作のバージョン番号。
Version: tea.String("2015-12-15"),
// リクエストプロトコル。有効な値: HTTP および HTTPS 。 HTTPS を使用することをお勧めします。
Protocol: tea.String("HTTPS"),
// API 操作の HTTP メソッド。
Method: tea.String("GET"),
// 認証タイプ。デフォルトタイプを使用します。API 操作が匿名リクエストをサポートしている場合は、Anonymous パラメータを指定して匿名リクエストを開始できます。
AuthType: tea.String("AK"),
// API スタイル。 RPC や ROA など。
Style: tea.String("ROA"),
// 操作の URL 。 RPC スタイルの操作のデフォルトパスは / です。ROA スタイルの操作の URL は、API メタデータの data.path パラメータから取得できます。
Pathname: tea.String("/api/v1/clusters"),
// リクエストボディの形式。
ReqBodyType: tea.String("json"),
// レスポンスボディの形式。
BodyType: tea.String("json"),
}
// クエリパラメータを構成します。
queries := map[string]interface{}{}
queries["name"] = tea.String("cluster-demo")
request := &openapi.OpenApiRequest{
Query: openapiutil.Query(queries),
}
// ランタイムオプション
runtime := &util.RuntimeOptions{}
// レスポンスは MAP タイプで、レスポンスボディ、レスポンスヘッダー、 HTTP ステータスコードが含まれています。
response, err := client.CallApi(params, request, runtime)
if err != nil {
panic(err)
}
fmt.Println(response["body"])
}