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

Alibaba Cloud SDK:Alibaba Cloud SDK V1.0 および V2.0

最終更新日:Jan 15, 2025

このトピックでは、生成方法、サポートされている言語、より多くの言語の拡張サポート、特定のシナリオの SDK サンプルという観点から、Alibaba Cloud SDK V1.0 と V2.0 の違いについて説明します。 以前に Alibaba Cloud SDK V1.0 を使用して Alibaba Cloud サービスを統合していて、ドキュメントが使い慣れたものと異なっていることがわかった場合は、このトピックを読んで Alibaba Cloud SDK V1.0 と V2.0 の違いを理解することができます。 Alibaba Cloud SDK を初めて使用する場合は、Alibaba Cloud SDK V2.0 から始めることをお勧めします。

Alibaba Cloud SDK V1.0 と V2.0 の比較

項目

Alibaba Cloud SDK V1.0 (非推奨)

Alibaba Cloud SDK V2.0 (推奨)

生成方法

異なるプログラミング言語用の SDK は、異なるテンプレートに基づいて生成されます。 SDK にカプセル化されている機能は、プログラミング言語によって異なります。 そのため、異なるプログラミング言語の SDK では、ユーザーエクスペリエンスが異なります。

SDK は、ドメイン固有言語 (DSL) である Darabonba を使用して生成されます。 Darabonba は、さまざまなプログラミング言語用の SDK を生成し、構文を自動的に検証するための中間言語として機能します。 これにより、異なるプログラミング言語の SDK を使用する場合に、一貫したユーザーエクスペリエンスが提供されます。

サポートされている言語

ほとんどの Alibaba Cloud サービスでは、最大 3 つの主流のプログラミング言語の SDK のみが提供されています。

6 つの主流のプログラミング言語の SDK が提供されています。

より多くの言語の拡張サポート

SDK はテンプレートに基づいて生成されるため、より多くのプログラミング言語用の SDK を生成することは困難です。

Darabonba で抽象構文木 (AST) を開発することにより、より多くのプログラミング言語用の SDK を簡単に生成できます。

SDK サンプル

異なるプログラミング言語のサンプルコードは、互いに異なります。 サンプルコードの正確性は保証できません。

異なるプログラミング言語のサンプルコードは、同じロジックに基づいて中間言語で記述されています。 すべてのサンプルコードは、正確性を保証するために検証されています。

特定のシナリオの SDK サンプル

特定のシナリオの SDK サンプルを作成することは困難です。 限られた数のプログラミング言語で、特定のシナリオの SDK サンプルを提供しているサービスはごくわずかです。

Darabonba を使用すると、一度にさまざまなプログラミング言語で特定のシナリオの SDK サンプルを生成できます。 これにより、SDK の使用方法を効率的に学習できます。 詳細については、サンプルコードセンターをご覧ください。

Alibaba Cloud SDK V1.0 (非推奨)

説明

ユーザーエクスペリエンスの不一致や認証情報の分離の不可能性などの問題があるため、Alibaba Cloud SDK V1.0 を使用しないことをお勧めします。

次の図は、Alibaba Cloud SDK V1.0 の基本アーキテクチャを示しています。

アーキテクチャに示されているように、Alibaba Cloud SDK V1.0 は次のレイヤーで構成されています。

  1. サービス SDK レイヤー: このレイヤーは、API 操作固有のパラメーターを処理します。

  2. コア SDK レイヤー: このレイヤーは、API 操作固有のパラメーターを HTTP リクエストパラメーターに変換します。

  3. HTTP クライアントレイヤー: このレイヤーは、リクエストを開始します。

Alibaba Cloud SDK V1.0 を使用して Alibaba Cloud サービスを統合するには、コア SDKサービス SDK をインポートする必要があります。

サンプルコード

複数の Alibaba Cloud サービスの API 操作を同時に呼び出す場合、サービスごとに共通の client オブジェクトを分離することはできません。 これにより、スレッドセーフティの問題が発生する可能性があります。

<!-- ECS sdk -->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-ecs</artifactId>
    <version>5.11.7</version>
</dependency>
<!-- core sdk -->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.6.1</version>
</dependency>
package com.example;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import com.aliyuncs.ecs.model.v20140526.*;

public class DescribeInstanceStatus {

    public static void main(String[] args) {
        // 環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
        DefaultProfile profile = DefaultProfile.getProfile(
                "<YOUR-REGION-ID>",
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        );

        // STS トークンを使用する
        // DefaultProfile profile = DefaultProfile.getProfile(
        //  "<YOUR-REGION-ID>",                                 // リージョン ID
        //  System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),       // RAM アカウントの AccessKey ID
        //  System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),   // RAM アカウントの AccessKey Secret
        //  System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")       // STS トークン
        // );

        // acs クライアントを初期化する
        IAcsClient client = new DefaultAcsClient(profile);

        // インスタンスステータスを照会するリクエストを作成する
        DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest();
        request.setRegionId("<YOUR-REGION-ID>");

        try {
            DescribeInstanceStatusResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }
    }
}

Alibaba Cloud SDK V2.0 (推奨)

Alibaba Cloud SDK V1.0 は、開発者によって広く使用されている初期バージョンです。 Alibaba Cloud SDK V2.0 は、開発者が Alibaba Cloud SDK V1.0 を使用するときに発生する一連の問題を解決するために開発されました。 Alibaba Cloud SDK V2.0 は、SDK の使用を簡素化し、統合コストを削減し、SDK の堅牢性を向上させるための多くの新機能を提供します。

Alibaba Cloud SDK V2.0 は、Alibaba Cloud によって開発された DSL である Darabonba を使用して生成されます。 この DSL は、より幅広い概念を表現できるだけでなく、さまざまな Alibaba Cloud サービス全体の API スタイルの違いを抽象化できる柔軟性を提供します。 DSL から生成された AST を解析することで、さまざまな API スタイル間のギャップを埋め、API 仕様から SDK を簡単に生成できるようになります。 Alibaba Cloud SDK V1.0 と比較して、Alibaba Cloud SDK V2.0 は次の利点を提供します。

  • 一貫したユーザーエクスペリエンス: 一部の Alibaba Cloud サービスはリモートプロシージャコール (RPC) スタイルで API を提供しますが、他の Alibaba Cloud サービスはリソース指向アーキテクチャ (ROA) スタイルで API を提供します。 API スタイルの違いにより、開発者が Alibaba Cloud SDK V1.0 を使用して Alibaba Cloud サービスを統合するときに、ユーザーエクスペリエンスに一貫性がなくなります。 Alibaba Cloud SDK V2.0 では、すべての Alibaba Cloud サービスの SDK は同じ方法で使用されます。 これにより、一貫したユーザーエクスペリエンスが保証されます。

  • 開発コストの削減: DSL を使用すると、Alibaba Cloud SDK V2.0 でビジネスロジックを記述できます。 これにより、Alibaba Cloud SDK V1.0 がコアライブラリと密結合されているという問題が解決されます。 これにより、SDK の更新によって発生する開発コストが削減されます。

  • ID と認証情報の分離: 各 Alibaba Cloud サービスは、SDK クライアントオブジェクトを提供します。 クライアントオブジェクトをインスタンス化して、Alibaba Cloud サービスのすべての API 操作を呼び出すことができます。 Alibaba Cloud SDK V2.0 のこの実装は、Alibaba Cloud SDK V1.0 の実装よりも優れています。 Alibaba Cloud SDK V1.0 では、SDK クライアントが複数のスレッドを処理し、権限管理の効率が低下します。 対照的に、Alibaba Cloud SDK V2.0 は、複数のスレッドのセキュリティを確保し、各 Alibaba Cloud サービスに関する ID と認証情報を分離し、複数の Alibaba Cloud サービスが 1 つのユーザープロファイル情報を共有する必要がありません。 リージョン、タイムアウト期間、HTTP プロキシ、再試行メカニズムなど、さまざまなパラメーターを設定して、さまざまな Alibaba Cloud サービスの API 操作を呼び出すことができます。

  • 複雑なシナリオ: Alibaba Cloud SDK V2.0 は、より複雑なシナリオでの API 呼び出しをサポートしています。 たとえば、Visual Intelligence API の FaceBody 機能を使用するには、オブジェクトストレージサービス (OSS) に画像をアップロードし、生成された画像 URL に基づいて AI を使用して画像を分析する必要があります。 この場合、Alibaba Cloud SDK V2.0 を使用すると、認証、画像のアップロード、画像の分析操作を組み合わせることができます。 これにより、API 呼び出しが簡素化されます。

  • 特定のシナリオの SDK サンプル: Alibaba Cloud SDK V2.0 は、すべての API リクエストの サンプルコード を提供します。 Alibaba Cloud SDK V2.0 は、複数の API リクエストが一度に送信されるシナリオの サンプルコード も提供します。 提供される情報は、SDK を簡単に使用し、Alibaba Cloud サービスを使用できるビジネスシナリオをよりよく理解するのに役立ちます。

新規ユーザーの場合は、Alibaba Cloud SDK V2.0 を直接使用することをお勧めします。 Alibaba Cloud SDK V1.0 の既存ユーザーの場合は、できるだけ早く SDK を最新バージョンに更新することをお勧めします。

サンプルコード

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>ecs20140526</artifactId>
  <version>5.1.8</version>
</dependency>
package com.example;

import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.DescribeInstanceStatusRequest;

public class Sample {

    public static void main(String[] args) throws Exception {
        Config config = new Config();
        // 必須。 AccessKey ID。 ランタイム環境に ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
        config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        // 必須。 AccessKey シークレット。 ランタイム環境に ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Elastic Compute Service (ECS) のエンドポイント。 詳細については、https://api.aliyun.com/product/Ecs をご覧ください。
        config.setEndpoint("<Endpoint>");
        Client client = new Client(config);
        DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest()
                .setRegionId("<YOUR-REGION-ID>");
        try {
            // サンプルコードをコピーして実行する場合は、API 操作のレスポンスを表示するための独自のコードを記述してください。
            client.describeInstanceStatus(request);
        } catch (TeaException error) {
            error.printStackTrace();
        } catch (Exception error) {
            error.printStackTrace();
        }
    }
}

SDK の依存関係情報を表示する

  1. OpenAPI ポータル にアクセスし、サービスを選択します。 この例では、Virtual Private Cloud (VPC) が使用されています。

image

  1. [SDK バージョン] を選択します。

image

  1. 言語を選択します。 [インストール方法] セクションで、サービスに対して選択された言語の SDK の依存関係を表示できます。 [概要] セクションで、最新の SDK バージョンを表示できます。

image