本文以在Windows作業系統上,通過IntelliJ IDEA使用阿里雲SDK為例,協助您瞭解如何快速使用阿里雲Java SDK。
前提條件
已安裝了JDK,如果還未安裝,請參見在Windows安裝JDK。
已安裝了IntelliJ IDEA,如果還未安裝,請參見在Windows搭建Java開發環境。
使用 SDK
使用OpenAPI門戶提供的程式碼範例工程
進入OpenAPI門戶的API調試頁面,選擇產品和介面。例如我們以調用Elastic Compute Service的DescribeInstanceTypeFamilies介面為例,可在搜尋欄中填入DescribeInstanceTypeFamilies,然後點擊進入API調試頁面。
在頁面中間的參數配置頁簽,並填寫需要的參數資訊。填寫時請參考右側的文檔頁簽,充分瞭解介面的說明和注意事項(尤其是費用相關資訊),以及各參數的具體含義和使用方法。如DescribeInstanceTypeFamilies介面支援傳入兩個參數,其中RegionId為必填,您可填入cn-hangzhou(表示杭州地區);Generation非必填,您可填入ecs-5(表示系列 V 執行個體規格類型系列),參數詳細取值可在右側文檔中查看。
在右側的SDK樣本頁面,選擇語言,單擊下載完整工程按鈕,下載SDK完整工程至本地並解壓。
說明完整工程中包含了SDK資訊以及當前OpenAPI的調用demo。
開啟IntelliJ IDEA,單擊File->Open,選擇解壓後的工程檔案夾,等待Maven自動安裝依賴資訊。
在調用之前,需要先擷取訪問憑證AccessKey,建議使用RAM使用者的AccessKey。更多資訊,請參見建立RAM使用者的AccessKey。
重要擷取RAM使用者的AccessKey之後,還需要在環境變數中設定AccessKey,具體操作步驟請參見在Linux、macOS和Windows系統配置環境變數
運行範例程式碼。
雙擊開啟Sample,點擊右上方運行按鈕運行。
查看運行結果。在底部控制台按下
ctrl+f
,搜尋statusCode
,如果看到"statusCode":200
表示調用成功。
在已有的專案中安裝SDK
擷取SDK
訪問SDK中心,選擇您想要使用的SDK的雲產品,這裡以Elastic Compute Service為例。SDK版本選擇 V2.0,語言選擇 Java,安裝方式以Apache Maven 為例。
引入SDK
開啟IntelliJ IDEA中已建立的Maven專案,在pom.xml中建立 <dependencies></dependencies>標籤,在該標籤中複製步驟1中的Apache Maven依賴。
<dependencies> <!--ECS V2.0 SDK --> <dependency> <groupId>com.aliyun</groupId> <artifactId>ecs20140526</artifactId> <version>5.1.2</version> </dependency> </dependencies>
右鍵專案名稱,選擇Maven->Reload project,下載Maven依賴。
建立Java類。
在專案src/main/java目錄下,按右鍵java,選擇 New->Java Class,名稱為Sample。
初始化雲產品用戶端。
重要初始化用戶端時需要使用AccessKey完成身分識別驗證,請提前擷取AccessKey。擷取方法請參見建立AccessKey。
擷取RAM使用者的AccessKey之後,還需要在環境變數中設定AccessKey,具體操作步驟請參見在Linux、macOS和Windows系統配置環境變數。
endpoint如何設定請參見服務存取點。
import com.aliyun.ecs20140526.Client; import com.aliyun.teaopenapi.models.Config; public class Sample { public static void main(String[] args) throws Exception { Config config = new Config() .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; Client client = new Client(config); } }
調用OpenAPI
在調用OpenAPI之前,您需要先瞭解OpenAPI的詳細資料,請查看API文檔。
同時在引入的雲產品Maven依賴包中,雲產品SDK提供了每一個OpenAPI的請求類和響應類,請求類中定義了參數及參數類型,響應類中定義了返回參數結構,避免您在調用OpenAPI時參數名拼字錯誤。
比如調用describeInstanceTypeFamilies,它的請求類是DescribeInstanceTypeFamiliesRequest,響應類是DescribeInstanceTypeFamiliesResponse。
說明OpenAPI請求類的命名規則:OpenAPI名稱+Request
OpenAPI響應類的命名規則:OpenAPI名稱+Response
import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.DescribeInstanceTypeFamiliesRequest; import com.aliyun.ecs20140526.models.DescribeInstanceTypeFamiliesResponse; import com.aliyun.teaopenapi.models.Config; public class Sample { public static void main(String[] args) throws Exception { Config config = new Config() .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; Client client = new Client(config); DescribeInstanceTypeFamiliesRequest describeInstanceTypeFamiliesRequest = new DescribeInstanceTypeFamiliesRequest(); describeInstanceTypeFamiliesRequest.setRegionId("cn-hangzhou"); DescribeInstanceTypeFamiliesResponse describeInstanceTypeFamiliesResponse = client.describeInstanceTypeFamilies(describeInstanceTypeFamiliesRequest); } }
處理異常,阿里雲SDK對異常做了統一處理。
TeaException: 在 SDK 的請求中主要以業務報錯為主的異常,該異常的樣本中提供了三個參數為使用者排查問題提供協助:
code: OpenAPI 業務報錯的錯誤碼。
message:OpenAPI 業務報錯的錯誤資訊,其中會包含本次請求的 RequestId。
data:OpenAPI 報錯後服務端返回的詳細資料
import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.DescribeInstanceTypeFamiliesRequest; import com.aliyun.ecs20140526.models.DescribeInstanceTypeFamiliesResponse; import com.aliyun.tea.TeaException; import com.aliyun.teaopenapi.models.Config; public class Sample { public static void main(String[] args) { try { Config config = new Config() .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; Client client = new Client(config); DescribeInstanceTypeFamiliesRequest describeInstanceTypeFamiliesRequest = new DescribeInstanceTypeFamiliesRequest(); describeInstanceTypeFamiliesRequest.setRegionId("cn-hangzhou"); DescribeInstanceTypeFamiliesResponse describeInstanceTypeFamiliesResponse = client.describeInstanceTypeFamilies(describeInstanceTypeFamiliesRequest); } catch (TeaException teaException) { // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。 // 列印錯誤碼 System.out.println(teaException.getCode()); // 列印錯誤資訊,錯誤資訊中包含 RequestId System.out.println(teaException.getMessage()); // 列印服務端返回的具體錯誤內容 System.out.println(teaException.getData()); } catch (Exception e) { TeaException error = new TeaException(e.getMessage(), e); // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。 // 錯誤 message System.out.println(error.getMessage()); // 診斷地址 System.out.println(error.getData().get("Recommend")); com.aliyun.teautil.Common.assertAsString(error.message); } } }
常見問題
運行時,提示“java: 錯誤: 不支援發行版本 X”。
同步選取
Ctrl+Alt+Shift+S
,進入Project Structure視窗。選擇Modules,在右側Language Level中選擇跟您所使用JDK版本一致的版本,例如您所使用的JDK 8,Language Level選擇“8 - Lambdas, type annotations etc. ”。單擊Apply,單擊OK。運行時,提示“java: Compilation failed: internal java compiler error”。
在IntelliJ IDEA功能表列,單擊File->Setting->Build, Execution, Deployment->Compiler->Java Compiler,Project bytecode version和Target bytecode version選擇跟您所使用JDK版本一致的版本,例如您所使用的JDK 8,這兩項選擇 8 即可。單擊Apply,單擊OK。