Alibaba Cloud SDK for Java V2.0 は汎用 API 呼び出しをサポートしています。このトピックでは、Alibaba Cloud SDK for Java V2.0 を使用して汎用呼び出しを行う方法について説明します。
特性
軽量: Alibaba Cloud SDK V2.0 for Node.js を使用すると、各サービスの SDK をインストールする必要なく、Alibaba Cloud SDK のコアライブラリのみをインストールすることで API 操作を呼び出すことができます。
使いやすさ:共通のリクエストパラメータを作成し、共通のクライアントを使用してリクエストを開始するだけで済みます。レスポンスは共通フォーマットで返されます。
詳細については、「汎用呼び出しと専用呼び出し」をご参照ください。
使用上の注意
汎用呼び出しを行う前に、API 操作のメタデータ を表示して、API スタイル、リクエストパラメータ、および URL を取得することをお勧めします。
Alibaba Cloud SDK のコアライブラリをインストールする
ターミナルで次のコマンドを実行して、Alibaba Cloud SDK V2.0 for Node.js のコアライブラリをインストールします。
npm install @alicloud/openapi-client
API 操作を呼び出す
リクエストクライアントを初期化する
client
オブジェクトを作成してリクエストクライアントを初期化し、クライアントを使用して API 操作を呼び出します。クライアントを初期化するときに、Credentials ツールを使用することもできます。 Credentials ツールの詳細については、「アクセス認証情報を管理する」をご参照ください。
// 環境変数から AccessKey ID と AccessKey シークレットを取得します。
let config = new OpenApi.Config({
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
config.endpoint = `ecs-cn-hangzhou.aliyuncs.com`;
let client = new OpenApi.default(config);
// パラメータを指定しない場合は、デフォルトの認証情報チェーンが使用されます。
// const credentialClient = new Credential.default();
// let config = new OpenApi.Config({
// credential: credentialClient,
// });
// config.endpoint = `ecs-cn-hangzhou.aliyuncs.com`;
// let client = new OpenApi.default(config);
// 環境変数から AccessKey ID と AccessKey シークレットを取得します。
let config = new $OpenApi.Config({
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
config.endpoint = `ecs-cn-hangzhou.aliyuncs.com`;
let client = new OpenApi(config);
// パラメータを指定しない場合は、デフォルトの認証情報チェーンが使用されます。
// let credential = new Credential();
// let config = new $OpenApi.Config({
// credential: credential,
// });
// config.endpoint = `ecs.cn-hangzhou.aliyuncs.com`;
// let client = new OpenApi(config)
API 操作に関する情報を構成する
OpenApi.Params
を使用して、呼び出す API 操作の基本情報 (API スタイル、API バージョン、リクエストメソッドなど) を構成します。次の例では、DescribeInstanceTypeFamilies 操作が呼び出されます。
// API 操作に関する情報を構成します。
let params = new OpenApi.Params({
style: 'RPC', // API スタイル (リモートプロシージャコール (RPC) やリソース指向アーキテクチャ (ROA) など)。
action: 'DescribeInstanceTypeFamilies', // API 操作。
version: '2014-05-26', // API 操作のバージョン番号。
protocol: 'HTTPS', // リクエストプロトコル。有効な値: HTTP および HTTPS 。 HTTPS を使用することをお勧めします。
method: 'POST', // API 操作の HTTP メソッド。
authType: 'AK', // 認証タイプ。デフォルトタイプを使用します。操作が匿名リクエストをサポートしている場合は、Anonymous パラメータを指定して匿名リクエストを開始できます。
pathname: `/`, // 操作の URL 。 RPC スタイルの操作のデフォルトパスは / です。 ROA スタイルの操作の URL は、API メタデータの data.path パラメータから取得できます。
reqBodyType: 'json', // リクエストボディのフォーマット。
bodyType: 'json', // レスポンスボディのフォーマット。
});
// API 操作に関する情報を構成します。
let params = new $OpenApi.Params({
style: 'RPC', // API スタイル (リモートプロシージャコール (RPC) やリソース指向アーキテクチャ (ROA) など)。
action: 'DescribeInstanceTypeFamilies', // API 操作。
version: '2014-05-26', // API 操作のバージョン番号。
protocol: 'HTTPS', // リクエストプロトコル。有効な値: HTTP および HTTPS 。 HTTPS を使用することをお勧めします。
method: 'POST', // API 操作の HTTP メソッド。
authType: 'AK', // 認証タイプ。デフォルトタイプを使用します。操作が匿名リクエストをサポートしている場合は、Anonymous パラメータを指定して匿名リクエストを開始できます。
pathname: `/`, // 操作の URL 。 RPC スタイルの操作のデフォルトパスは / です。 ROA スタイルの操作の URL は、API メタデータの data.path パラメータから取得できます。
reqBodyType: 'json', // リクエストボディのフォーマット。
bodyType: 'json', // レスポンスボディのフォーマット。
});
リクエストパラメータを構成する
OpenApi.OpenApiRequest
を使用してリクエストパラメータを構成します。リクエストパラメータは、クエリ文字列、ボディ、またはストリームで渡すことができます。 API 操作のメタデータに基づいて、リクエストパラメータを渡すメソッドを選択します。たとえば、DescribeInstanceTypeFamilies
API 操作の RegionId リクエストパラメータは、メタデータ で {"name":"RegionId","in":"query",...}}
として定義されています。 "in":"query"
は、RegionId パラメータがクエリ文字列で渡されることを示します。
パラメータの渡し方 | 説明 |
query | メタデータで |
body | メタデータで |
stream | ファイルをアップロードする必要がある場合は、Stream パラメータを構成することでファイルストリームを渡すことができます。 |
// シナリオ 1:クエリ文字列を構成する
let query = { 'RegionId': 'cn-hangzhou' };
let request = new OpenApi.OpenApiRequest({
query: OpenApiUtil.default.query(query),
});
// シナリオ 2:本文を構成し、reqBodyType を json に設定する。
// let body = {
// 'param1': 'value1',
// 'param2': 'value2',
// };
// let request = new OpenApi.OpenApiRequest({
// body: OpenApiUtil.default.query(body),
// });
// シナリオ 3:Stream パラメータを構成してファイルストリームを渡す
// let request = new OpenApi.OpenApiRequest({
// stream: '<FILE_STREAM>', // <FILE_STREAM> を実際のファイルストリームに置き換えます。
// });
// シナリオ 4:リクエストボディを構成し、reqBodyType を formData に設定する。
// let formParams = {
// 'param1': 'value1',
// 'param2': 'value2',
// };
// let request = new OpenApi.OpenApiRequest({
// body: formParams,
// });
// シナリオ 1:クエリ文字列を構成する
let query: { [key: string]: any } = { "RegionId": "cn-hangzhou" };
let request = new $OpenApi.OpenApiRequest({
query: OpenApiUtil.query(query),
});
// シナリオ 2:本文を構成し、reqBodyType を json に設定する。
// let body = {
// "param1": "value1",
// "param2": "value2",
// };
// let request = new $OpenApi.OpenApiRequest({
// body: OpenApiUtil.query(body),
// });
// シナリオ 3:Stream パラメータを構成してファイルストリームを渡す
// let request = new $OpenApi.OpenApiRequest({
// stream: '<FILE_STREAM>', // <FILE_STREAM> を実際のファイルストリームに置き換えます。
// });
// シナリオ 4:リクエストボディを構成し、reqBodyType を formData に設定する。
// let formParams = {
// "param1": "value1",
// "param2": "value2",
// };
// let request = new $OpenApi.OpenApiRequest({
// body: formParams, // フォームパラメータを直接渡します。
// });
リクエストを開始する
OpenApiClient
を使用して callApi メソッドを呼び出し、リクエストを開始します。 API 操作を呼び出すときに、タイムアウトパラメータやプロキシパラメータなどのランタイムパラメータを指定できます。詳細については、「詳細設定」をご参照ください。
// ランタイムパラメータを構成します。
let runtime = new Util.RuntimeOptions({
// true の値は、証明書の検証を無効にすることを指定します。 false の値は、証明書の検証を有効にすることを指定します。
// ignoreSSL: true,
// HTTP プロキシを構成します。
// httpProxy: "http://xx.xx.xx.xx:xxxx",
// httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999",
// プロキシを必要としないアドレスを構成します。
// noProxy: '127.0.0.1,localhost',
// 接続リクエストのタイムアウト期間を構成します。
// connectTimeout: 10000,
// 読み取りリクエストのタイムアウト期間を構成します。
// readTimeout: 10000
});
// リクエストを送信します。
let response = await client.callApi(params, request, runtime);
// レスポンスは MAP タイプで、レスポンスボディ、レスポンスヘッダー、および HTTP ステータスコードが含まれています。
console.log(JSON.stringify(response.body))
// ランタイムパラメータを構成します。
let runtime = new $Util.RuntimeOptions({
// true の値は、証明書の検証を無効にすることを指定します。 false の値は、証明書の検証を有効にすることを指定します。
// ignoreSSL: true,
// HTTP プロキシを構成します。
// httpProxy: "http://xx.xx.xx.xx:xxxx",
// httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999",
// プロキシを必要としないアドレスを構成します。
// noProxy: '127.0.0.1,localhost',
// 接続リクエストのタイムアウト期間を構成します。
// connectTimeout: 10000,
// 読み取りリクエストのタイムアウト期間を構成します。
// readTimeout: 10000
});
// リクエストを送信します。
let response = await client.callApi(params, request, runtime);
// レスポンスは MAP タイプで、レスポンスボディ、レスポンスヘッダー、および HTTP ステータスコードが含まれています。
console.log(JSON.stringify(response.body));
サンプルコード
RPC API 操作を呼び出す
この例では、ECS の DescribeInstanceTypeFamilies 操作を呼び出して、操作の汎用呼び出しを行う方法を示します。
Node.js
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const OpenApiUtil = require('@alicloud/openapi-util');
class Client {
static async main() {
// 環境変数から AccessKey ID と AccessKey シークレットを取得します。
let config = new OpenApi.Config({
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
config.endpoint = `ecs-cn-hangzhou.aliyuncs.com`;
let client = new OpenApi.default(config);
let params = new OpenApi.Params({
style: 'RPC', // API スタイル。
action: 'DescribeInstanceTypeFamilies', // API 操作。
version: '2014-05-26', // 操作のバージョン番号。
protocol: 'HTTPS', // 操作のプロトコル。
method: 'POST', // 操作の HTTP メソッド。
authType: 'AK', // 認証タイプ。デフォルトタイプを使用します。操作が匿名リクエストをサポートしている場合は、Anonymous パラメータを指定して匿名リクエストを開始できます。
pathname: `/`, // 操作の URL 。 RPC スタイルの操作のデフォルトパスは / です。 ROA スタイルの操作の URL は、API メタデータの data.path パラメータから取得できます。
reqBodyType: 'json', // リクエストボディのフォーマット。
bodyType: 'json', // レスポンスボディのフォーマット。
});
let query = { 'RegionId': 'cn-hangzhou' };
let request = new OpenApi.OpenApiRequest({
query: OpenApiUtil.default.query(query),
});
let runtime = new Util.RuntimeOptions({});
let response = await client.callApi(params, request, runtime);
console.log(JSON.stringify(response.body, null, 2))
}
}
exports.Client = Client;
Client.main();
TypeScript
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
import OpenApiUtil from '@alicloud/openapi-util';
export default class Client {
static async main(): Promise<void> {
// 環境変数から AccessKey ID と AccessKey シークレットを取得します。
let config = new $OpenApi.Config({
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
config.endpoint = `ecs-cn-hangzhou.aliyuncs.com`;
let client = new OpenApi(config);
let params = new $OpenApi.Params({
style: 'RPC', // API スタイル。
action: 'DescribeInstanceTypeFamilies', // API 操作。
version: '2014-05-26', // 操作のバージョン番号。
protocol: 'HTTPS', // 操作のプロトコル。
method: 'POST', // 操作の HTTP メソッド。
authType: 'AK',
pathname: `/`, // 操作の URL 。
reqBodyType: 'json', // リクエストボディのフォーマット。
bodyType: 'json', // レスポンスボディのフォーマット。
});
// クエリ文字列を構成します。
let query: { [key: string]: any } = { "RegionId": "cn-hangzhou" };
// API リクエストを作成します。
let request = new $OpenApi.OpenApiRequest({
query: OpenApiUtil.query(query),
});
// ランタイムパラメータを構成します。
let runtime = new $Util.RuntimeOptions({});
// レスポンスは MAP タイプで、レスポンスボディ、レスポンスヘッダー、および HTTP ステータスコードが含まれています。
let response = await client.callApi(params, request, runtime);
console.log(JSON.stringify(response.body));
}
}
Client.main();
例:RESTful スタイル (ROA スタイル) の API 操作を呼び出す
この例では、Container Service for Kubernetes (ACK) の DescribeClustersV1 操作を呼び出して、操作の汎用呼び出しを行う方法を示します。
Node.js
const OpenApi = require('@alicloud/openapi-client');
const OpenApiUtil = require('@alicloud/openapi-util');
const Util = require('@alicloud/tea-util');
const Tea = require('@alicloud/tea-typescript');
class Client {
static async main() {
// 環境変数から AccessKey ID と AccessKey シークレットを取得します。
let config = new OpenApi.Config({
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
config.endpoint = `cs.cn-qingdao.aliyuncs.com`;
let client = new OpenApi.default(config);
let params = new OpenApi.Params({
// 呼び出す操作。
action: 'DescribeClustersV1',
// API 操作のバージョン番号。
version: '2015-12-15',
// 操作が呼び出されるプロトコル。
protocol: 'HTTPS',
// API 操作の HTTP メソッド。
method: 'GET',
// 認証タイプ。デフォルトタイプを使用します。操作が匿名リクエストをサポートしている場合は、Anonymous パラメータを指定して匿名リクエストを開始できます。
authType: 'AK',
style: 'ROA',
// 操作の URL 。 RPC スタイルの操作のデフォルトパスは / です。 ROA スタイルの操作の URL は、API メタデータの data.path パラメータから取得できます。
pathname: `/api/v1/clusters`,
// リクエストボディのフォーマット。
reqBodyType: 'json',
// レスポンスボディのフォーマット。
bodyType: 'json',
});
// クエリパラメータ
let queries = {};
queries['name'] = 'cluster-demo';
let request = new OpenApi.OpenApiRequest({
query: OpenApiUtil.default.query(queries),
});
// ランタイムオプション
let runtime = new Util.RuntimeOptions({});
// レスポンスは MAP タイプで、レスポンスボディ、レスポンスヘッダー、および HTTP ステータスコードが含まれています。
let response = await client.callApi(params, request, runtime);
console.log(response.body);
}
}
exports.Client = Client;
Client.main();
TypeScript
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import OpenApiUtil from '@alicloud/openapi-util';
import Util, * as $Util from '@alicloud/tea-util';
import * as $tea from '@alicloud/tea-typescript';
export default class Client {
static async main(): Promise<void> {
let config = new $OpenApi.Config({
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
config.endpoint = `cs.cn-qingdao.aliyuncs.com`;
let client = new OpenApi(config);
let params = new $OpenApi.Params({
// 呼び出す操作。
action: "DescribeClustersV1",
// API 操作のバージョン番号。
version: "2015-12-15",
// 操作が呼び出されるプロトコル。
protocol: "HTTPS",
// API 操作の HTTP メソッド。
method: "GET",
authType: "AK",
style: "ROA",
// 操作の URL 。
pathname: `/api/v1/clusters`,
// リクエストボディのフォーマット。
reqBodyType: "json",
// レスポンスボディのフォーマット。
bodyType: "json",
});
// クエリパラメータ
let queries: { [key: string]: any } = { "name": "cluster-demo" };
let request = new $OpenApi.OpenApiRequest({
query: OpenApiUtil.query(queries),
});
// ランタイムオプション
let runtime = new $Util.RuntimeOptions({});
// レスポンスは MAP タイプで、レスポンスボディ、レスポンスヘッダー、および HTTP ステータスコードが含まれています。
let response = await client.callApi(params, request, runtime);
console.log(JSON.stringify(response.body));
}
}
Client.main();