本文為您介紹使用阿里雲 SDK 調用 OpenAPI 。
阿里雲 SDK
阿里雲為開發人員提供了多種程式設計語言(Java、C#、Go、Python、Node.js/TypeScript、PHP、C++ 等)的 SDK。開發人員只需要整合 SDK,通過 SDK 暴露的方法直接調用 OpenAPI 。SDK 統一封裝了簽名邏輯、逾時機制、重試機制,並根據文檔返回結構化 Response 對象,易於開發。
更多關於阿里雲SDK的介紹請參見阿里雲SDK。
整合方法
訪問OpenAPI 門戶網站,點擊頂部按鈕,搜尋雲產品。
點擊頂部 SDK 菜單,選擇您需要的整合的語言。
查看 SDK 安裝方式和整合程式碼範例,完成 SDK 整合。
V2 和 V1 版本比較
升級版 SDK(V2)較原版(V1)支援的語言更多,支援更複雜的 OpenAPI 使用情境,支援非同步呼叫和同步調用,解決了原版 SDK 的部分歷史遺留問題,使用起來更加靈活與強大。推薦使用升級版 SDK(V2),更多詳情請參見V2.0 SDK和V1.0 SDK。
說明
新專案接入建議您使用升級版 SDK(V2),已使用原版 SDK(V1)整合的專案提案進行升級。
整合案例
我們以 Java 語言整合 SDK,調用 ECS的DescribeInstance
情境為例,範例程式碼如下:
V2
升級版 SDK(V2)中包含了參數處理,請求組裝以及傳回值處理等 OpenAPI 請求的主要邏輯,開發人員可以通過安裝相關產品的 SDK 包依賴即可完成 OpenAPI 的請求,不再依賴核心庫 core。
依賴
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>ecs20140526</artifactId>
<version>5.1.0</version>
</dependency>
範例程式碼
// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
/**
* 使用AK&SK初始化帳號Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static com.aliyun.ecs20140526.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,您的 AccessKey ID
.setAccessKeyId(accessKeyId)
// 必填,您的 AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 訪問的網域名稱
config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
return new com.aliyun.ecs20140526.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
// 請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例使用環境變數擷取 AccessKey 的方式進行調用,僅供參考,建議使用更安全的 STS 方式,更多鑒權訪問方式請參見阿里雲Java SDK身分識別驗證配置章節
com.aliyun.ecs20140526.Client client = Sample.createClient(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
com.aliyun.ecs20140526.models.RunInstancesRequest runInstancesRequest = new com.aliyun.ecs20140526.models.RunInstancesRequest();
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 複製代碼運行請自行列印 API 的傳回值
client.runInstancesWithOptions(runInstancesRequest, runtime);
} catch (TeaException error) {
// 如有需要,請列印 error
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 如有需要,請列印 error
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}
V1
依賴安裝
必須安裝 SDK 核心庫 Core,核心庫包括對 OpenAPI 的 HTTP 要求、認證資訊、簽名演算法、異常處理等主要邏輯等。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-ecs</artifactId>
<version>5.11.5</version>
</dependency>
範例程式碼
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.ecs.model.v20140526.DescribeInstancesRequest;
import com.aliyuncs.ecs.model.v20140526.DescribeInstancesResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
public class DescribeInstances {
public static void main(String[] args) {
// 建立DefaultAcsClient執行個體並初始化。
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
IAcsClient client = new DefaultAcsClient(profile);
// 建立API請求並設定參數。
DescribeInstancesRequest request = new DescribeInstancesRequest();
request.setRegionId("cn-hangzhou");
request.setInstanceNetworkType("vpc");
request.setInstanceChargeType("PostPaid");
request.setInternetChargeType("PayByTraffic");
request.setPageSize(10);
try {
// 發起請求並處理應答或異常。
DescribeInstancesResponse response = client.getAcsResponse(request);
for (DescribeInstancesResponse.Instance instance : response.getInstances()) {
System.out.println(instance.getImageId());
System.out.println(instance.getInstanceId());
System.out.println(instance.getPublicIpAddress());
}
} 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());
}
}
}