このトピックでは、Alibaba Cloud SDK V1.0 と V2.0 の違いを、生成方法、サポート言語、言語の拡張サポート、特定シナリオ向けの SDK サンプルといった観点から説明します。以前に 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 はテンプレートベースで生成されるため、サポート言語を増やすことは困難です。 | 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 は次のレイヤーで構成されています:
サービス SDK レイヤー:このレイヤーは、API 操作固有のパラメーターを処理します。
コア SDK レイヤー:このレイヤーは、API 操作固有のパラメーターを HTTP リクエストパラメーターに変換します。
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>
<!-- コア 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 は、開発者が V1.0 を使用する際に直面する一連の問題を解決するために開発されました。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 ではビジネスロジックを記述できます。これにより、V1.0 がコアライブラリと密結合しているという問題が解決されます。これにより、SDK の更新に伴う開発コストが削減されます。
ID と認証情報の分離:各 Alibaba Cloud サービスは、SDK クライアントオブジェクトを提供します。クライアントオブジェクトをインスタンス化して、Alibaba Cloud サービスのすべての API を呼び出すことができます。この V2.0 の実装は、V1.0 の実装よりも優れています。V1.0 では、1 つの SDK クライアントが複数のスレッドを処理するため、権限管理の効率が低くなります。対照的に、Alibaba Cloud SDK V2.0 は、複数のスレッドのセキュリティを確保し、各 Alibaba Cloud サービスの ID と認証情報を分離します。そのため、複数の Alibaba Cloud サービスで 1 つのユーザープロファイル情報を共有する必要がありません。リージョン、タイムアウト期間、HTTP プロキシ、リトライメカニズムなど、さまざまなパラメーターをサービスごとに設定して API を呼び出すことができます。
複雑なシナリオ:Alibaba Cloud SDK V2.0 は、より複雑なシナリオでの API 呼び出しをサポートします。たとえば、Visual Intelligence API の FaceBody 機能を使用するには、Object Storage Service (OSS) に画像をアップロードし、生成された画像 URL に基づいて AI を使用して画像を分析する必要があります。この場合、Alibaba Cloud SDK V2.0 を使用すると、認証、画像のアップロード、画像分析といった操作を組み合わせることができます。これにより、API 呼び出しが簡素化されます。
特定シナリオ向けの SDK サンプル:Alibaba Cloud SDK V2.0 は、すべての API リクエストのサンプルコードを提供します。また、複数の 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();
// 環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID から AccessKey ID を取得します。
config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
// 環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET から AccessKey Secret を取得します。
config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// 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 の依存関係情報の表示
-
Alibaba Cloud OpenAPI Developer Portal に移動します。この例では、Virtual Private Cloud (VPC) を使用します。
上部メニューで現在の製品名をクリックします。 [Products and Services] ドロップダウンパネルで、カテゴリ別に目的の製品を検索して選択します。
[SDK バージョン] を選択します。
利用可能なバージョンは v2.0 (推奨) と v1.0 です。v2.0 を選択することを推奨します。
言語を選択します。[Installation Method] セクションで、選択した言語の SDK の依存関係を確認できます。[Overview] セクションでは、最新の SDK バージョンを確認できます。
たとえば、Java を選択した場合、[Overview] セクションには最新バージョンが 7.7.0 であることが表示されます。[Installation Method] で Apache Maven を選択した場合、依存関係では groupId が com.aliyun、artifactId が vpc20160428、バージョンが 7.7.0 となります。