このトピックでは、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 はテンプレートに基づいて生成されるため、他のプログラミング言語の 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>4.6.0</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 は、開発者が 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 の更新によって発生する開発コストを削減できます。
-
アイデンティティと認証情報の分離:各 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 サービスのアイデンティティと認証情報を分離し、複数の Alibaba Cloud サービスが 1 つのユーザープロファイル情報を共有する必要がありません。異なるパラメーターを設定して、異なる Alibaba Cloud サービスの API オペレーションを呼び出すことができます。設定できるパラメーターには、リージョン、タイムアウト期間、HTTP プロキシ、リトライメカニズムなどがあります。
-
複雑なシナリオ: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 リクエストのサンプルコードを提供します。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();
// 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.alibabacloud.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 version] を選択します。
利用可能なバージョンには、[v2.0 (Recommended)] と [v1.0] があります。[v2.0] を選択することを推奨します。
-
言語を選択します。[Installation Method] セクションで、対象サービスについて選択した言語の SDK 依存関係を表示できます。[Overview] セクションで、最新の SDK バージョンを表示できます。
たとえば、[Java] を選択した場合、[Overview] セクションには最新バージョンが 7.7.0 であることが表示されます。[Installation Method] で [Apache Maven] を選択した場合、依存関係は groupId が com.aliyun、artifactId が vpc20160428、version が 7.7.0 となります。