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

Alibaba Cloud SDK:Generalized calls

最終更新日:Sep 11, 2026

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

特徴

  1. 軽量:個別の製品 SDK をインストールすることなく、aliyun-java-sdk-core をインストールするだけで、すべての OpenAPI を呼び出すことができます。

  2. 迅速なイテレーションと互換性:クラウドサービスが SDK を提供していない場合、または SDK が最新の API オペレーションに対応して更新されていない場合でも、汎化呼び出しを行うことができます。これにより、SDK の更新を待つことなく、最新の API オペレーションを呼び出すことができます。

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

注意事項

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

コア SDK のインストール

pom.xml ファイルに次の依存関係を追加して、Alibaba Cloud SDK V1.0 for Java のコアライブラリをインストールします。

<dependency>
     <groupId>com.aliyun</groupId>
     <artifactId>aliyun-java-sdk-core</artifactId>
     // バージョンを選択します。
     <version>[(4.0.0,5.0.0)]</version>
</dependency>

API オペレーションの呼び出し

リクエストクライアントの初期化

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

説明

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

 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.profile.DefaultProfile;
 
        // 1. DefaultAcsClient インスタンスを作成して初期化します。
        DefaultProfile profile = DefaultProfile.getProfile(
                // リージョン ID。
                "cn-hangzhou",
                // System.getenv は、Resource Access Management (RAM) ユーザーの AccessKey ID が環境変数から取得されることを示します。
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // System.getenv は、RAM ユーザーの AccessKey Secret が環境変数から取得されることを示します。
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // オプション:クライアントの HTTPS を設定します。
        HttpClientConfig clientConfig = HttpClientConfig.getDefault();
//        // サーバー証明書を検証しません。
//        clientConfig.setIgnoreSSLCerts(true);
//        // 各ホストの最大接続数。
//        clientConfig.setMaxRequestsPerHost(6);
//        // 接続タイムアウト。
//        clientConfig.setConnectionTimeoutMillis(30000L);
//        // 読み取りタイムアウト。
//        clientConfig.setReadTimeoutMillis(30000L);
//        // 書き込みタイムアウト。
//        clientConfig.setWriteTimeoutMillis(60000L);
//        // HTTP プロキシを設定します。
//        clientConfig.setHttpProxy("http://127.0.0.1:9898");
//        // HTTPS プロキシを設定します。
//        clientConfig.setHttpsProxy("http://user:password@127.0.0.1:8989");
//        // プロキシを無視するアドレスのリストを設定します。
//        clientConfig.setNoProxy("127.0.0.1,localhost");

        profile.setHttpClientConfig(clientConfig);
        IAcsClient client = new DefaultAcsClient(profile);

API オペレーションの基本情報とリクエストパラメーターの設定

CommonRequest を使用して、API オペレーションの共通リクエストパラメーターとオペレーション固有のパラメーターを設定します。共通リクエストパラメーターの詳細については、「高度な設定」をご参照ください。

説明

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

API リクエストパラメーター

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

説明

パラメーターの渡し方

これは、リクエストパラメーターが "in":"query" に設定されている場合に適用されます。

putQueryParameter(String key, String value)

説明

リクエストパラメーターがコレクションの場合、putQueryParameter("key.1", "value1"); のようにパラメーターを指定できます。

putQueryParameter("key.2", "value2");... の形式でパラメーターを渡すことができます。

これは、リクエストパラメーターが "in":"body" または "in": "formData" の場合に適用されます。

putBodyParameter(String key, String value)

説明

リクエストパラメーターの値が文字列型でない場合は、その値を JSON 文字列に変換して指定します。例:request.putBodyParameter("key", new Gson().toJson(value));

ファイルのアップロード

setHttpContent(byte[] content, String charset, FormatType formatType)

説明

formatType を FormatType.RAW に設定します。

        // 2. API リクエストを作成し、リクエストパラメーターを設定します。
        // この例では、DescribeInstanceStatus API を呼び出すリクエストを作成する方法を示します。この API は、Elastic Compute Service (ECS) のステータスを取得するために使用されます。
        CommonRequest request = new CommonRequest();
        // 2.1 共通リクエストパラメーターを設定します。
        request.setSysMethod(com.aliyuncs.http.MethodType.POST);
        request.setSysDomain("ecs-cn-hangzhou.aliyuncs.com");// API オペレーションのドメイン名。
        request.setSysVersion("2014-05-26");// API バージョン。
        request.setSysAction("DescribeInstanceStatus"); // API オペレーションの名前。RPC 形式の API オペレーションを呼び出すときは、SysAction() を設定してオペレーション名を指定する必要があります。
        request.setSysConnectTimeout(30000); // タイムアウト期間。
        request.setSysProtocol(com.aliyuncs.http.ProtocolType.HTTPS); // リクエストプロトコル。有効値:HTTP および HTTPS。HTTPS の使用を推奨します。
//        request.setSysUriPattern("/"); // RPC 形式の API オペレーションでは、このパラメーターを設定しないでください。
        
        // 2.2 オペレーション固有のリクエストパラメーターを設定します。
        // シナリオ 1:putQueryParameter(String key, String value) でクエリパラメーターを指定します。
        request.putQueryParameter("RegionId", "cn-hangzhou");
        List<String> instanceIds = List.of(
                "i-bp1axhql4dqXXXXXXXX",
                "i-bp124uve8zqXXXXXXXX"
        );
        for(int i = 0; i < instanceIds.size(); ++i) {
            request.putQueryParameter("InstanceId." + (i + 1), (String)instanceIds.get(i));
        }
        request.putQueryParameter("PageNumber", "1");
        request.putQueryParameter("PageSize", "30");

        // シナリオ 2:putBodyParameter(String key, String value) でボディパラメーターを指定します。
        // request.putBodyParameter("key1", "value1");
        // request.putBodyParameter("key2", "value2");
        // request.putBodyParameter("key3", "value3");

        // シナリオ 3:ファイルをアップロードするには、setHttpContent(byte[] content, String charset, FormatType formatType) を指定します。formatType を FormatType.RAW に設定します。
        // byte[] bodyImg = Files.readAllBytes(Paths.get("<FILE_PATH>")); //  を実際のファイルパスに置き換えます。
        // request.setHttpContent(bodyImg, "UTF-8", FormatType.RAW);
  

リクエストの開始

client を使用して getCommonResponse メソッドを呼び出します。

// リクエストを送信します。
CommonResponse response = client.getCommonResponse(request);
// 戻り値 `response.getData()` は、`RequestId` と OpenAPI の戻りパラメーターを含む JSON 形式のデータです。
System.out.println(response.getData());

コード例

例:RPC 形式の API オペレーションの呼び出し

この例では、CommonRequest を使用して ECS の DescribeInstanceStatus API を呼び出します。

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.GsonBuilder;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class Sample {
    public static void main(String[] args) throws ClientException, UnsupportedEncodingException {
        // DefaultAcsClient インスタンスを作成して初期化します。
        DefaultProfile profile = DefaultProfile.getProfile(
                // リージョン ID。
                "cn-hangzhou",
                // 環境変数から RAM ユーザーの AccessKey ID を取得します。
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // 環境変数から RAM ユーザーの AccessKey Secret を取得します。
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        IAcsClient client = new DefaultAcsClient(profile);
        
        // API リクエストを作成し、パラメーターを設定します。
        CommonRequest request = new CommonRequest();
        request.setSysMethod(com.aliyuncs.http.MethodType.POST); // リクエストメソッド。
        request.setSysDomain("ecs-cn-hangzhou.aliyuncs.com"); // API オペレーションのドメイン名。
        request.setSysVersion("2014-05-26"); // API バージョン番号。
        request.setSysAction("DescribeInstanceStatus"); // API オペレーションの名前。RPC 形式の API オペレーションを呼び出すときは、SysAction() を設定してオペレーション名を指定する必要があります。
         request.setSysProtocol(com.aliyuncs.http.ProtocolType.HTTPS); // リクエストプロトコル。有効値:HTTPS および HTTP。HTTPS の使用を推奨します。
        request.putQueryParameter("RegionId", "cn-hangzhou");
        List<String> instanceIds = List.of(
                "i-bp1axhql4dqXXXXXXXX",
                "i-bp124uve8zqXXXXXXXX"
        );
        for(int i = 0; i < instanceIds.size(); ++i) {
            request.putQueryParameter("InstanceId." + (i + 1), (String)instanceIds.get(i));
        }
        request.putQueryParameter("PageNumber", "1");
        request.putQueryParameter("PageSize", "30");
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        } catch (ClientException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
    }
}

例:RESTful API オペレーションの呼び出し

この例では、CommonRequest を使用して Container Service for Kubernetes (ACK) の DescribeClustersV1 API を呼び出します。

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
public class Sample {
    public static void main(String[] args) {
        // DefaultAcsClient インスタンスを作成して初期化します。
        DefaultProfile profile = DefaultProfile.getProfile(
                // リージョン ID。
                "cn-hangzhou",
                // 環境変数から RAM ユーザーの AccessKey ID を取得します。
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // 環境変数から RAM ユーザーの AccessKey Secret を取得します。
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        IAcsClient client = new DefaultAcsClient(profile);
        // API リクエストを作成し、パラメーターを設定します。
        CommonRequest request = new CommonRequest();
        request.setSysDomain("cs.aliyuncs.com");// ドメイン名。
        request.setSysVersion("2015-12-15");// API バージョン。
        request.setSysUriPattern("/clusters"); // API リソースの URI。ROA 形式の API オペレーションを呼び出すときは、UriPattern() を設定して完全なリソースパスを指定する必要があります。リソースパスは、OpenAPI メタデータの data.path から取得します。
        request.setSysMethod(com.aliyuncs.http.MethodType.GET);// リクエストメソッド。
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        } catch (ClientException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
    }
}

よくある質問

  1. 「必須パラメーター 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 ペア関連のエラーがないか確認します。

      一般的なエラーの例:

      accessKeyId = System.getenv("yourAccessKeyID"),
      accessKeySecret = System.getenv("yourAccessKeySecret")
      説明

      上記のエラーリクエストの例では、System.getenv() の引数として渡された文字列 (例: "yourAccessKeyID") が、AccessKey の値そのものではなく、環境変数の「名前」として扱われます。この関数は、指定された名前の環境変数から「値」を読み取ろうとしますが、そのような名前の環境変数が設定されていない場合、値を取得できずにエラーが発生します。

      正しい例

      System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
      System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
  2. リクエストが失敗し、次のエラーメッセージが表示されます:「com.aliyuncs.exceptions.ClientException: MissingParameter : The input parameter Timestamp that is mandatory for processing this request is not supplied.」

    原因:RPC 形式の API オペレーションの共通リクエストパラメーターに SysUriPattern パラメーターが設定されています。

    解決策:共通リクエストパラメーターから SysUriPattern パラメーターを削除します。