OpenAPI を呼び出すには、SDK をプロジェクトに統合する必要があります。SDK は、開発を簡素化し、機能の統合を加速し、メンテナンスコストを削減します。Alibaba Cloud SDK の統合には、SDK のインポート、アクセス認証情報の設定、SDK の使用の 3 つのステップが含まれます。このトピックでは、この統合を実行する方法について説明します。
前提条件
JDK 1.8 以降。
SDK のインポート
SDK センターにログインし、Short Message Service (SMS) など、使用したいプロダクトを選択します。
[インストール] ページで、[すべての言語] を [Java] に設定します。次に、[クイックスタート] タブで、Short Message Service (SMS) SDK のインストール方法を見つけます。

アクセス認証情報の設定
Alibaba Cloud OpenAPI を呼び出すには、アクセス認証情報を設定する必要があります。一般的な認証情報タイプには、AccessKey と セキュリティトークンサービス (STS) トークン があります。認証情報の漏洩を防ぐため、環境変数として保存することをお勧めします。セキュリティソリューションの詳細については、「アクセス認証情報を安全に使用する」をご参照ください。このトピックでは、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を例として使用します。
Linux および macOS での環境変数の設定
export コマンドを使用した環境変数の設定
export コマンドを使用して設定された一時的な環境変数は、現在のセッションでのみ有効です。セッションを終了すると、設定された環境変数は無効になります。永続的な環境変数を設定するには、対応するオペレーティングシステムの起動設定ファイルに export コマンドを追加します。
AccessKey ID を設定して Enter キーを押します。
# <ACCESS_KEY_ID> をお使いの AccessKey ID に置き換えます。 export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyIDAccessKey Secret を設定して Enter キーを押します。
# <ACCESS_KEY_SECRET> をお使いの AccessKey Secret に置き換えます。 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 Secret
変数名: 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 API の詳細については、「SendMessageToGlobe」をご参照ください。
1. リクエストクライアントの初期化
SDK では、すべての OpenAPI 呼び出しはリクエストクライアント (Client) から開始されます。OpenAPI を呼び出す前に、リクエストクライアントを初期化する必要があります。リクエストクライアントは複数の方法で初期化できます。この例では、AccessKey を使用してクライアントを初期化する方法を示します。初期化メソッドの詳細については、「アクセス認証情報の管理」をご参照ください。
`Client` インスタンスなどの Client オブジェクトはスレッドセーフです。スレッドごとに個別のインスタンスを作成することなく、マルチスレッド環境で使用できます。
開発では、`new` キーワードを使用してクライアントオブジェクトを頻繁に作成しないでください。この方法は、リソースの浪費とパフォーマンスの低下につながる可能性があります。シングルトンパターンを使用してクライアントをカプセル化することをお勧めします。これにより、アプリケーションライフサイクル全体で、同じアクセス認証情報とエンドポイントに対して 1 つのクライアントオブジェクトのみが初期化されるようになります。
public static com.aliyun.dysmsapi20180501.Client createClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必須、環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID が設定されていることを確認してください。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必須、環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// https://api.alibabacloud.com/product/Dysmsapi をご参照ください。
config.endpoint = "dysmsapi.aliyuncs.com";
return new com.aliyun.dysmsapi20180501.Client(config);
}2. リクエストオブジェクトの作成
OpenAPI を呼び出すとき、SDK が提供するリクエストオブジェクトを使用してパラメーターを渡すことができます。OpenAPI のリクエストオブジェクトは、<OpenAPIName>Request 形式で名前が付けられます。たとえば、SendSms API のリクエストオブジェクトは SendSmsRequest です。リクエストパラメーターの詳細については、SendMessageToGlobe の API ドキュメントをご参照ください。
OpenAPI がリクエストパラメーターをサポートしていない場合、リクエストオブジェクトを作成する必要はありません。たとえば、DescribeCdnSubList を呼び出す場合、API はリクエストパラメーターをサポートしていません。
com.aliyun.dysmsapi20180501.models.SendMessageToGlobeRequest sendMessageToGlobeRequest = new com.aliyun.dysmsapi20180501.models.SendMessageToGlobeRequest()
.setTo("8521245567****")
.setMessage("Hello");3. リクエストの開始
リクエストクライアントを使用して OpenAPI を呼び出す場合、<apiName>WithOptions 形式の関数を使用することをお勧めします。ここで、<apiName> はキャメルケースの OpenAPI の名前です。この関数は、前のステップのリクエストオブジェクトと実行時パラメーターの 2 つのパラメーターを取ります。実行時パラメーターは、タイムアウト設定やプロキシ設定などのリクエスト動作を設定します。詳細については、「高度な設定」をご参照ください。
OpenAPI がリクエストパラメーターをサポートしていない場合、リクエストを開始するときにリクエストオブジェクトを渡す必要はありません。たとえば、DescribeCdnSubList を呼び出す場合、実行時パラメーターのみを渡す必要があります。
OpenAPI のレスポンスオブジェクトは、<OpenAPIName>Response 形式で名前が付けられます。たとえば、SendSms API のレスポンスオブジェクトは SendSmsResponse です。
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
Client client = createClient();
// API を呼び出します
client.sendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);4. 例外の処理
Java SDK は、例外を `TeaUnretryableException` と `TeaException` に分類します。
`TeaUnretryableException`: この例外は通常、ネットワークの問題が原因で発生し、最大リトライ回数に達した後にスローされます。
`TeaException`: この例外は、主にビジネスエラーが原因で発生します。
例外処理の詳細については、「例外処理」をご参照ください。
例外の伝播、ログの記録、回復の試行など、例外を処理するための適切な措置を講じて、システムの堅牢性と安定性を確保してください。
完全なコードサンプルの表示
特別なシナリオ: ファイルアップロード用の Advance インターフェイスの設定
Image Search や Visual Intelligence API などのクラウドプロダクトを使用してローカルイメージを処理またはアップロードする場合、公式ドキュメントで提供されている OpenAPI はファイルアップロードを直接サポートしていない場合があります。この場合、ファイルをアップロードするには、クラウドプロダクトが提供する Advance インターフェイスを使用できます。このインターフェイスは、ファイルストリームオブジェクトの受け渡しをサポートしています。基本的な実装メカニズムは次のとおりです。クラウドプロダクトは、アップロードされたファイルを Alibaba Cloud Object Storage Service (OSS) に一時的に保存します。デフォルトのストレージリージョンは cn-shanghai です。その後、プロダクトは OSS から一時ファイルを読み取り、関連する機能を実装します。このトピックでは、Visual Intelligence API - Face and Body の DetectBodyCount インターフェイスを例として使用します。
Alibaba Cloud OSS に保存されている一時ファイルは、定期的にクリアされます。
リクエストクライアントの初期化
クラウドプロダクトの
regionIdとendpointの両方を設定する必要があります。regionIdは、一時ファイルが OSS に保存されるリージョンを指定します。regionIdを設定しないと、クラウドプロダクトと OSS が異なるリージョンにあるため、OpenAPI を呼び出すときにタイムアウトなどの問題が発生する可能性があります。public static com.aliyun.facebody20191230.Client createClient() throws Exception { com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() // 必須。System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") は環境変数から AccessKey ID を取得します。 .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) // 必須。System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") は環境変数から AccessKey Secret を取得します。 .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); config.regionId = "cn-shanghai"; config.endpoint = "facebody.cn-shanghai.aliyuncs.com"; return new com.aliyun.facebody20191230.Client(config); }リクエストオブジェクトの作成
ファイルストリームを渡すために
<OpenAPIName>AdvanceRequestオブジェクトを作成します。パラメーター名とタイプの詳細については、<OpenAPIName>AdvanceRequestソースファイルをご参照ください。たとえば、DetectBodyCountAdvanceRequestでサポートされているパラメーター名はimageURLObjectで、そのタイプはInputStreamです。com.aliyun.facebody20191230.models.DetectBodyCountAdvanceRequest detectBodyCountAdvance = new com.aliyun.facebody20191230.models.DetectBodyCountAdvanceRequest() .setImageURLObject(Files.newInputStream(Paths.get("<FILE_PATH>"))); // <FILE_PATH> を実際のファイルパスに置き換えます。リクエストの開始
<apiName>Advance関数を呼び出してリクエストを開始します。com.aliyun.facebody20191230.Client client = createClient(); com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); // リクエストを開始します。 com.aliyun.facebody20191230.models.DetectBodyCountResponse resp = client.detectBodyCountAdvance(detectBodyCountAdvance, runtime);
よくある質問
OpenAPI を呼び出すと、「You are not authorized to perform this operation.」というエラーメッセージが返されます。
原因: 使用している AccessKey に対応する Resource Access Management (RAM) ユーザーに、API を呼び出す権限がありません。
解決策: RAM ユーザーに必要な OpenAPI 権限を付与します。RAM ユーザーに権限を付与する方法の詳細については、「RAM ユーザーへの権限付与」をご参照ください。
たとえば、SendMessageToGlobe を呼び出すときに「You are not authorized to perform this operation.」エラーが返された場合は、次のカスタムポリシーを作成し、対応する権限を RAM ユーザーに付与できます。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "dysms:SendMessageToGlobe", "Resource": "*" } ] }OpenAPI を呼び出すと、「The specified endpoint can't operate this region.」というエラーメッセージが返されます。
原因: 呼び出している OpenAPI は、リクエストクライアントを初期化したときに指定したエンドポイントをサポートしていません。
解決策: 「エンドポイントの設定」をご参照いただき、エンドポイントを変更して、OpenAPI を再度呼び出してください。
OpenAPI を呼び出すと、「java.lang.NullPointerException...」というエラーメッセージが返されます。
原因: AccessKey が正しく渡されませんでした。
解決策: リクエストクライアントを初期化するときに、AccessKey が正しく渡されているかどうかを確認します。
System.getenv("XXX")は環境変数からXXXの値を取得することに注意してください。
SDK の使用時に発生するエラーのその他の解決策については、「よくある質問」をご参照ください。