OpenAPI のオペレーションを呼び出す際は、 SDK をプロジェクトに統合することを推奨します。SDK を使用することで、開発プロセスを簡素化し、機能を迅速に統合し、メンテナンスコストを効果的に削減できます。Alibaba Cloud SDK の統合は、次の 3 つの主なステップからなります: Alibaba Cloud SDK のインポート、アクセス認証情報の設定、 SDK の使用。このトピックでは、 SDK の統合プロセスについて詳しく説明します。
環境要件
Node.js >= 8.x
SDK のインポート
-
SDK Center にログインし、Short Message Service (SMS) など、呼び出す API の製品を選択します。
-
[Installation] ページ、[All Languages] を [TypeScript] に設定します。 次に、[Quick Start] タブで、Short Message Service (SMS) の SDK インストール手順を確認できます。

アクセス認証情報の設定
OpenAPI オペレーションを呼び出すには、AccessKey や STS トークンなどのアクセス認証情報が必要です。 漏洩を防ぐため、認証情報は環境変数に保存します。 ベストプラクティスについては、「アクセス認証情報の安全な使用」をご参照ください。 以下の例では、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET の環境変数を使用します。
Linux および macOS での設定方法
以下の例では、変数名として ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET を使用します。 必要に応じて、OSS_ACCESS_KEY_ID や OSS_ACCESS_KEY_SECRET など、独自の名前に置き換えてください。
次の export コマンドを実行して、環境変数を設定します。
export で設定された変数は一時的なもので、現在のセッションでのみ有効です。 永続化するには、export コマンドをシェルの起動ファイル (~/.bashrc や ~/.zshrc など) に追加してください。
-
AccessKey ID の設定:
# yourAccessKeyID をお使いの AccessKey ID に置き換えてください。 export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID -
AccessKey secret の設定:
# yourAccessKeySecret をお使いの AccessKey secret に置き換えてください。 export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret -
設定の確認:
echo $ALIBABA_CLOUD_ACCESS_KEY_IDを実行します。 正しい値が返された場合、設定は成功です。
Windows での設定方法
グラフィカルユーザーインターフェース (GUI) の使用
手順
次の手順では、 Windows 10 の GUI を使用して環境変数を設定する方法について説明します。
デスクトップで [PC] を右クリックし、[プロパティ] > [システムの詳細設定] > [環境変数] の順に選択し、[システム変数] または [ユーザー変数] の [新規] をクリックします。その後、設定を完了します。
変数
値の例
AccessKey ID
変数名: ALIBABA_CLOUD_ACCESS_KEY_ID
変数値: yourAccessKeyID
AccessKey シークレット
変数名: ALIBABA_CLOUD_ACCESS_KEY_SECRET
変数値: yourAccessKeySecret
設定の確認
[スタート] から [ファイル名を指定して実行] をクリックするか、キーボードショートカット Win+R を使用します。
cmdと入力し、[OK] をクリックするか Enter キーを押してコマンドプロンプトを開きます。echo %ALIBABA_CLOUD_ACCESS_KEY_ID%コマンドとecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%コマンドを実行します。コマンドが正しい AccessKey を返す場合、設定は成功です。
コマンドプロンプト (CMD) の使用
手順
コマンドプロンプトを管理者として開き、次のコマンドを実行して、新しい環境変数をシステムに追加します。
setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M/Mパラメータは、システム環境変数を示します。ユーザー環境変数を設定する場合は、このパラメータを省略できます。設定の確認
[スタート] から [ファイル名を指定して実行] をクリックするか、キーボードショートカット Win+R を使用します。
cmdと入力し、[OK] をクリックするか Enter キーを押してコマンドプロンプトを開きます。echo %ALIBABA_CLOUD_ACCESS_KEY_ID%コマンドとecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%コマンドを実行します。コマンドが正しい AccessKey を返す場合、設定は成功です。
Windows PowerShell の使用
PowerShell では、すべての新しいセッションで有効な新しい環境変数を設定できます。
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::User)すべてのユーザーに対して環境変数を設定するには、管理者権限が必要です。
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::Machine)現在のセッションでのみ有効な一時的な環境変数を設定できます。
$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "yourAccessKeyID"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "yourAccessKeySecret"PowerShell で、 Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID コマンドと Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET コマンドを実行します。コマンドが正しい AccessKey を返す場合、設定は成功です。
SDK の使用
このトピックでは、Short Message Service (SMS) の または SendMessageToGlobe API を呼び出す例を示します。 または SendMessageToGlobe API の API リファレンスについては、「」または「SendMessageToGlobe」をご参照ください。
1. リクエストクライアントの初期化
すべての OpenAPI 呼び出しは、リクエストクライアントを介して行われます。 この例では、AccessKey ペアでクライアントを初期化します。 他の初期化方法については、「アクセス認証情報の管理」をご参照ください。
-
Dysmsapi20180501 や インスタンスなどのクライアントオブジェクトはスレッドセーフであり、スレッドごとに個別のインスタンスを作成することなく、マルチスレッド環境で使用できます。
-
new でクライアントオブジェクトを繰り返し作成することは避けてください。 シングルトンパターンを使用して、アプリケーションのライフサイクル全体で、認証情報とエンドポイントごとにクライアントインスタンスが 1 つだけ存在するようにします。
TypeScript の例
import Dysmsapi20180501, * as $Dysmsapi20180501 from '@alicloud/dysmsapi20180501';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Util, * as $Util from '@alicloud/tea-util';
export default class Client {
static createClient(): Dysmsapi20180501 {
let config = new $OpenApi.Config({
// 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
// エンドポイントの詳細については、https://api.alibabacloud.com/product/Dysmsapi をご参照ください。
config.endpoint = `dysmsapi.aliyuncs.com`;
return new Dysmsapi20180501(config);
}
}
Node.js の例
const Dysmsapi20180501 = require('@alicloud/dysmsapi20180501');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Tea = require('@alicloud/tea-typescript');
class Client {
static createClient() {
let config = new OpenApi.Config({
// 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
// エンドポイントの詳細については、https://api.alibabacloud.com/product/Dysmsapi をご参照ください。
config.endpoint = `dysmsapi.aliyuncs.com`;
return new Dysmsapi20180501.default(config);
}
}
2. リクエストオブジェクトの作成
SDK リクエストオブジェクトを介してパラメーターを渡します。このオブジェクト名は <OpenAPI Name>Request (例:SendSmsRequest) です。 パラメーターの詳細については、API リファレンス:「SendMessageToGlobe」をご参照ください。
API にリクエストパラメーターがない場合は、このステップをスキップしてください。 たとえば、DescribeCdnSubList にはリクエストオブジェクトは必要ありません。
TypeScript の例
// リクエストオブジェクトを作成し、必須の入力パラメーターを設定します
let sendMessageToGlobeRequest = new $Dysmsapi20180501.SendMessageToGlobeRequest({
// 実際の受信者番号に置き換えてください。
to: "<YOUR_VALUE>",
// 実際の SMS 内容に置き換えてください。
message: "<YOUR_VALUE>",
});
Node.js の例
// リクエストオブジェクトを作成し、必須の入力パラメーターを設定します
let sendMessageToGlobeRequest = new Dysmsapi20180501.SendMessageToGlobeRequest({
// 実際の受信者番号に置き換えてください。
to: '<YOUR_VALUE>',
// 実際の SMS 内容に置き換えてください。
message: '<YOUR_VALUE>',
});
3. リクエストの送信
クライアントの <operationName>WithOptions 関数を呼び出します。<operationName> はキャメルケースの API 名です。 この関数は、リクエストオブジェクトとランタイムパラメーター (タイムアウト、プロキシなど) を受け取ります。 「高度な設定」をご参照ください。
API にリクエストパラメーターがない場合は、ランタイムオプションのみを渡してください。 たとえば、DescribeCdnSubList にはランタイムパラメーターのみが必要です。
TypeScript の例
// ランタイムパラメーターを作成します。
let runtime = new $Util.RuntimeOptions({ });
let client = Client.createClient();
// リクエストを送信します。
await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);
Node.js の例
// ランタイムパラメーターを作成します。
let runtime = new Util.RuntimeOptions({ });
let client = Client.createClient();
// リクエストを送信します。
await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);
4. 例外処理
V2.0 Node.js SDK は、2 種類の例外をスローします。
-
UnretryableError :通常、ネットワークの問題が原因で最大リトライ回数を超えた後にスローされます。
err.data.lastRequestを介して最後のリクエストを取得できます。 -
ResponseError :API によって返されたサーバー側エラーを示します。
「例外処理」をご参照ください。
常に例外を処理してください。伝播、ログ記録、または回復を行ってください。 例外を無視しないでください。
クリックして完全なコード例を表示
Advance 操作によるファイルのアップロード
一部の API (画像検索や Visual Intelligence など) は、ローカルファイルパスを直接受け付けません。 Advance 操作を使用して、ストリーム経由でファイルをアップロードします。 SDK は、ファイルを cn-shanghai リージョンの OSS バケットに一時的に保存し、サービスはそこからファイルを読み取ります。 この例では、Visual Intelligence API の DetectBodyCount 操作を使用します。
Alibaba Cloud OSS に保存されている一時ファイルは定期的にクリアされます。
-
リクエストクライアントの初期化
regionIdとendpointの両方を同じリージョンに設定してください。regionIdは、一時的な OSS ファイルが保存される場所を決定します。regionIdを省略すると、製品と OSS バケットのリージョンが一致せず、タイムアウトが発生します。TypeScript の例
function createClient(): facebody20191230 { let config = new $OpenApi.Config({ // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。 accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], }); // エンドポイントと regionId は同じリージョンである必要があります。 config.regionId = 'cn-shanghai'; config.endpoint = 'facebody.cn-shanghai.aliyuncs.com'; return new facebody20191230(config); }Node.js の例
function createClient() { let config = new OpenApi.Config({ // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。 accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], }); // エンドポイントと regionId は同じリージョンである必要があります。 config.regionId = 'cn-shanghai'; config.endpoint = 'facebody.cn-shanghai.aliyuncs.com'; return new facebody20191230.default(config); } -
リクエストオブジェクトの作成
<OpenAPIName>AdvanceRequestオブジェクトを作成して、ファイルストリームを渡してください。 ファイルストリームのパラメーター名はImageURLObjectです。TypeScript の例
// ファイルをファイルストリームとして読み取ります。 const filePath = '<FILE_PATH>'; // これを実際のファイルパスに置き換えてください。 // ファイルが存在するかどうかを確認します。 if (!fs.existsSync(filePath)) { console.error('File does not exist:', filePath); return; } // ストリームを作成し、ストリームエラーをリッスンします。 const fileStream = fs.createReadStream(filePath).on('error', (err) => { console.error('Stream error:', err); process.exit(1); }); let detectBodyCountAdvanceRequest = new $facebody20191230.DetectBodyCountAdvanceRequest({ imageURLObject: fileStream, });Node.js の例
// ファイルをファイルストリームとして読み取ります。 const filePath = '<FILE_PATH>'; // これを実際のファイルパスに置き換えてください。 // ファイルが存在するかどうかを確認します。 if (!fs.existsSync(filePath)) { console.error('File does not exist:', filePath); return; } // ストリームを作成し、ストリームエラーをリッスンします。 const fileStream = fs.createReadStream(filePath).on('error', (err) => { console.error('Stream error:', err); process.exit(1); }); let detectBodyCountAdvanceRequest = new facebody20191230.DetectBodyCountAdvanceRequest({ imageURLObject: fileStream, }); -
リクエストの送信
<operationName>Advance関数を呼び出してリクエストを送信します。TypeScript の例
// ランタイムパラメーターを設定します。 let runtime = new $Util.RuntimeOptions({ }); let client = Client.createClient(); // リクエストを送信します。 await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);Node.js の例
// ランタイムパラメーターを設定します。 let runtime = new Util.RuntimeOptions({ }); let client = Client.createClient(); // リクエストを送信します。 await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
よくある質問
-
API 呼び出し時の "You are not authorized to perform this operation" エラー
-
"triggerUncaughtException Error: getaddrinfo ENOTFOUND" エラー (エンドポイントの問題)
-
"Cannot read properties of undefined (reading 'getCredential')" または "InvalidAccessKeyId.NotFound: code: 404" エラー
その他の一般的なエラーについては、「よくある質問」をご参照ください。