API 呼び出しを容易にするために、プロジェクトに Alibaba Cloud SDK を統合することをお勧めします。 SDK は開発プロセスを簡素化し、機能を迅速に統合し、O&M コストを大幅に削減します。 Alibaba Cloud SDK と統合するには、次の手順を実行します。Alibaba Cloud SDK のインストール、アクセス認証情報の構成、および SDK の使用。このトピックでは、Alibaba Cloud SDK と統合する方法について説明します。
前提条件
Node.js のバージョンは 8.x 以降です。
SDK をインポートする
SDK Center にログインし、SDK を使用したいサービスを選択します。この例では、Short Message Service (SMS) を選択します。
[Short Message Service] ページ、[TypeScript] を [すべての言語] セクションで選択します。 [クイックスタート] タブで、Short Message Service (SMS) SDK のインストール方法を取得します。

アクセス認証情報を構成する
Alibaba Cloud サービスの API オペレーションを呼び出すには、AccessKey ペア や Security Token Service (STS) トークン などのアクセス認証情報を構成する必要があります。 AccessKey ペアの漏洩を防ぐために、環境変数に AccessKey ペアを記録できます。その他のセキュリティソリューションの詳細については、「認証情報のセキュリティソリューション」をご参照ください。この例では、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を使用して、AccessKey ペアを記録します。
Linux および macOS で環境変数を構成する
export コマンドを使用して環境変数を構成する
export コマンドを使用して構成された一時環境変数は、現在のセッションでのみ有効です。セッションを終了すると、構成された環境変数は無効になります。永続的な環境変数を構成するには、対応するオペレーティングシステムの起動構成ファイルに export コマンドを追加します。
AccessKey ID を構成し、Enter キーを押します。
# <ACCESS_KEY_ID> を AccessKey ID に置き換えます。 export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyIDAccessKey シークレットを構成し、Enter キーを押します。
# <ACCESS_KEY_SECRET> を AccessKey シークレットに置き換えます。 export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret構成が成功したかどうかを確認します。
echo $ALIBABA_CLOUD_ACCESS_KEY_IDコマンドを実行します。有効な AccessKey ID が返された場合、環境変数は構成されています。
Windows で環境変数を構成する
GUI を使用する
手順
Windows 10 で GUI を使用して環境変数を構成する場合、次の手順を実行します。
Windows デスクトップで、[この PC] を右クリックし、[プロパティ] を選択します。表示されるページで、[システムの詳細設定] をクリックします。 [システムのプロパティ] ダイアログボックスの [詳細設定] タブで、[環境変数] をクリックします。 [環境変数] ダイアログボックスで、[ユーザー環境変数] または [システム環境変数] セクションの [新規] をクリックします。次に、次の表に示す変数を構成します。
変数
例
AccessKey ID
変数名: ALIBABA_CLOUD_ACCESS_KEY_ID
変数値: LTAI****************
AccessKey シークレット
変数名: ALIBABA_CLOUD_ACCESS_KEY_SECRET
変数値: yourAccessKeySecret
構成が成功したかどうかを確認します。
Windows デスクトップで、[スタート] をクリックするか、[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は、環境変数がシステムレベルであることを示します。ユーザーレベルの環境変数を構成する場合は、このパラメータを使用しないことを選択できます。構成が成功したかどうかを確認します。
Windows デスクトップで、[スタート] をクリックするか、[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 の詳細については、「SendMessageToGlobe」をご参照ください。
1. リクエストクライアントを初期化する
SDK では、API オペレーションへのすべてのリクエストはクライアントから送信されます。 API オペレーションを実行する前に、リクエストクライアントを初期化する必要があります。複数のメソッドを使用して、リクエストクライアントを初期化できます。この例では、AccessKey ペアを使用してリクエストクライアントを初期化します。詳細については、「アクセス認証情報を管理する」をご参照ください。
Dysmsapi20180501 インスタンスなどのクライアントオブジェクトはスレッドセーフであり、セキュリティリスクなしでマルチスレッド環境で使用できます。スレッドごとにインスタンスを作成する必要はありません。
開発プロジェクトでは、new キーワードを使用してクライアントオブジェクトを頻繁に作成しないことをお勧めします。そうしないと、リソースの浪費が増加し、サービスのパフォーマンスが低下する可能性があります。クライアントをシングルトンモードでカプセル化することをお勧めします。これにより、アプリケーションのライフサイクル全体で、同じアクセス認証情報とエンドポイントに対して 1 つの Client インスタンスのみが初期化されます。
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({
// Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
// 必須。コード実行環境で次の環境変数が設定されていることを確認します: ALIBABA_CLOUD_ACCESS_KEY_ID。
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
// 必須。コード実行環境で次の環境変数が設定されていることを確認します: ALIBABA_CLOUD_ACCESS_KEY_SECRET。
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
// See https://api.alibabacloud.com/product/Dysmsapi.
// SMS のエンドポイント。詳細については、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({
// Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
// 必須。コード実行環境で次の環境変数が設定されていることを確認します: ALIBABA_CLOUD_ACCESS_KEY_ID。
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
// 必須。コード実行環境で次の環境変数が設定されていることを確認します: ALIBABA_CLOUD_ACCESS_KEY_SECRET。
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
});
// See https://api.alibabacloud.com/product/Dysmsapi.
// SMS のエンドポイント。詳細については、https://api.alibabacloud.com/product/Dysmsapi をご覧ください。
config.endpoint = `dysmsapi.aliyuncs.com`;
return new Dysmsapi20180501.default(config);
}
}
2. リクエストオブジェクトを作成する
API オペレーションを呼び出してパラメータを渡すときは、SDK によって提供されるリクエストオブジェクトを使用する必要があります。リクエストオブジェクトの名前は、<API オペレーション名>Request の形式で指定します。たとえば、SendSms API オペレーションのリクエストオブジェクトは SendSmsRequest です。パラメータの詳細については、API リファレンスを参照してください。 SendMessageToGlobe オペレーションのパラメータの詳細については、「SendMessageToGlobe」をご参照ください。
API オペレーションがリクエストパラメータをサポートしていない場合は、リクエストオブジェクトを作成する必要はありません。たとえば、DescribeCdnSubList オペレーションはリクエストパラメータをサポートしていません。
TypeScript
// Create request object and set required input parameters
// リクエストオブジェクトを作成し、必要な入力パラメータを設定します
let sendMessageToGlobeRequest = new $Dysmsapi20180501.SendMessageToGlobeRequest({
// Please replace with the actual recipient number.
// 実際の受信者番号に置き換えてください。
to: "<YOUR_VALUE>",
// Please replace with the actual SMS content.
// 実際の SMS コンテンツに置き換えてください。
message: "<YOUR_VALUE>",
});Node.js
// Create request object and set required input parameters
// リクエストオブジェクトを作成し、必要な入力パラメータを設定します
let sendMessageToGlobeRequest = new Dysmsapi20180501.SendMessageToGlobeRequest({
// Please replace with the actual recipient number.
// 実際の受信者番号に置き換えてください。
to: '<YOUR_VALUE>',
// Please replace with the actual SMS content.
// 実際の SMS コンテンツに置き換えてください。
message: '<YOUR_VALUE>',
});3. API リクエストを開始する
リクエストクライアントを使用して API オペレーションを呼び出すときは、関数の名前を <API オペレーション名>WithOptions の形式で指定することをお勧めします。 <API オペレーション名> はキャメルケースで指定します。この関数には、リクエストオブジェクトとランタイムパラメータの 2 つのパラメータが含まれています。リクエストオブジェクトは前の手順で作成されます。ランタイムパラメータは、タイムアウトやプロキシ構成などのリクエストアクションを指定するために使用されます。詳細については、「詳細構成」をご参照ください。
API オペレーションがリクエストパラメータをサポートしていない場合は、リクエストにリクエストオブジェクトを指定する必要はありません。たとえば、DescribeCdnSubList オペレーションを呼び出すときは、ランタイムパラメータのみを指定する必要があります。
TypeScript
// Create runtime parameters.
// ランタイムパラメータを作成します。
let runtime = new $Util.RuntimeOptions({ });
let client = Client.createClient();
// Send a request.
// リクエストを送信します。
await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);Node.js
// Create runtime parameters.
// ランタイムパラメータを作成します。
let runtime = new Util.RuntimeOptions({ });
let client = Client.createClient();
// Send a request.
// リクエストを送信します。
await client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);4. エラーを処理する
Node.js 用 Alibaba Cloud SDK V2.0 は、例外を次のタイプに分類します。
UnretryableError: ほとんどの場合、このタイプの例外はネットワークの問題が原因です。再試行回数が上限に達すると、UnretryableError がスローされます。
err.data.lastRequestを使用して、例外が発生したときのリクエスト情報を取得できます。ResponseError: ほとんどの場合、このタイプの例外はビジネスエラーが原因です。
SDK 例外を処理する方法の詳細については、「例外処理」をご参照ください。
適切な例外処理対策(例外の報告、例外のログ記録、再試行の実行など)を講じて、システムの堅牢性と安定性を確保することをお勧めします。
クリックして完全なサンプルコードを表示する
特別なシナリオ: Advance オペレーションによるファイルアップロード
オンプレミス機器の画像を処理したり、画像をアップロードしたりするために Image Search または Visual Intelligence API (VIAPI) を使用する場合、ドキュメントに記載されている Image Search または VIAPI の API は直接アップロードをサポートしていません。画像をアップロードするには、ファイルストリームの送信をサポートする Advance オペレーションを使用する必要があります。クラウドサービスは、アップロードされたファイルを一時的に Object Storage Service (OSS) に保存し、必要に応じて OSS から一時ファイルを読み取ります。 OSS のデフォルトリージョンは cn-shanghai です。次の例は、VIAPI の DetectBodyCount オペレーションを呼び出す方法を示しています。
OSS の一時ファイルは定期的にクリアされます。
リクエストクライアントを初期化する
regionIdパラメータとクラウドサービスのendpointの両方が指定されていることを確認します。regionIdは、一時ファイルが保存される OSS リージョンを示します。regionIdパラメータを構成しない場合、クラウドサービスは OSS とは異なるリージョンを使用する可能性があり、API タイムアウトが発生する可能性があります。TypeScript
function createClient(): facebody20191230 { let config = new $OpenApi.Config({ // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_ID. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_SECRET. accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], }); // Specify the same region for the endpoint and regionId parameters. // エンドポイントと 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({ // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_ID. accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_SECRET. accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], }); // Specify the same region for the endpoint and regionId parameters. // エンドポイントと regionId パラメータに同じリージョンを指定します。 config.regionId = 'cn-shanghai'; config.endpoint = 'facebody.cn-shanghai.aliyuncs.com'; return new facebody20191230.default(config); }リクエストオブジェクトを作成する
<API オペレーション>AdvanceRequestリクエストオブジェクトを作成して、ファイルストリームを渡します。リクエストオブジェクトで、パラメータ名をImageURLObjectに設定します。TypeScript
// Read the file as a fileStream stream. // ファイルを fileStream ストリームとして読み取ります。 const filePath = '<FILE_PATH>'; // Replace the value with the actual file path. // 実際のファイルパスで値を置き換えます。 // Check the file. // ファイルを確認します。 if (!fs.existsSync(filePath)) { console.error('The file does not exist:', filePath); return; } // Create a stream and listen for stream errors. // ストリームを作成し、ストリームエラーをリッスンします。 const fileStream = fs.createReadStream(filePath).on('error', (err) => { console.error('File stream errors:', err); process.exit(1); }); let detectBodyCountAdvanceRequest = new $facebody20191230.DetectBodyCountAdvanceRequest({ imageURLObject: fileStream, });Node.js
// Read the file as a fileStream stream. // ファイルを fileStream ストリームとして読み取ります。 const filePath = '<FILE_PATH>'; // Replace the value with the actual file path. // 実際のファイルパスで値を置き換えます。 // Check the file. // ファイルを確認します。 if (!fs.existsSync(filePath)) { console.error('The file does not exist:', filePath); return; } // Create a stream and listen for stream errors. // ストリームを作成し、ストリームエラーをリッスンします。 const fileStream = fs.createReadStream(filePath).on('error', (err) => { console.error('File stream errors:', err); process.exit(1); }); let detectBodyCountAdvanceRequest = new facebody20191230.DetectBodyCountAdvanceRequest({ imageURLObject: fileStream, });リクエストを開始する
<API オペレーション>AdvanceRequestオペレーションを呼び出します。TypeScript
// Configure the runtime parameters. // ランタイムパラメータを構成します。 let runtime = new $Util.RuntimeOptions({ }); let client = Client.createClient(); // Send the request. // リクエストを送信します。 await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);Node.js
// Configure the runtime parameters. // ランタイムパラメータを構成します。 let runtime = new Util.RuntimeOptions({ }); let client = Client.createClient(); // Send the request. // リクエストを送信します。 await client.detectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
FAQ
API オペレーションによってスローされた「You are not authorized to perform this operation」エラーを処理するにはどうすればよいですか?
API オペレーションによってスローされた「triggerUncaughtException Error: getaddrinfo ENOTFOUND」エンドポイントエラーを処理するにはどうすればよいですか?
API オペレーションによってスローされた「Cannot read properties of undefined (reading 'getCredential')」または「InvalidAccessKeyId.NotFound: code: 404」AccessKey エラーを処理するにはどうすればよいですか?
SDK 例外を処理する方法の詳細については、「FAQ」をご参照ください。