全部產品
Search
文件中心

Alibaba Cloud SDK:V2.0 SDK 和 V1.0 SDK

更新時間:Aug 03, 2024

本文通過產生方案、語言支援、語言拓展、SDK情境化樣本等多方面為您詳細介紹了阿里雲SDK升級前後的差異。如果您之前使用過阿里雲SDK整合雲產品,發現現在文檔中的寫法與以前不同,可參考本文瞭解不同版本SDK差異,若您是初次使用阿里雲SDK,請直接使用V2.0版本SDK。

V1.0 vs V2.0

對比項

V1.0 SDK(不推薦)

V2.0 SDK(推薦)

產生方案

基於模板產生,各程式設計語言之間採用不同的模板方案,各個語言之間功能完備程度不一致,使用體驗不一。

基於 DSL 語言 Darabonba 方案產生。新方案通過 DSL 語言進行統一的中間表達,並進行了文法校正,使用體驗一致。

語言支援

大部分雲產品的老版本SDK無法支援超過3門以上的主流語言。

支援主流6門語言的SDK產生。

語言擴充

模板化產生,擴充難度太高,老版本SDK很難擴充新語言。

新語言產生器只需接入DSL語言的AST即可完成擴充,未來還會新增更多的語言。

SDK 樣本

各語言間的程式碼範例不一致,不能保證代碼的正確性。

各語言間的代碼在邏輯行為上保持一致,通過中繼語言來統一產生,具有校正能力,有效保證範例程式碼的準確性。

SDK 情境化樣本

多語言情境化樣本編寫困難,極少有產品提供,覆蓋語言數極少。

通過DSL一次編寫就能產生多語言的SDK情境化樣本,可以協助開發人員極大的簡化SDK使用的理解成本,更多樣本請參見SDK 樣本中心

V1.0 SDK(不推薦)

說明

由於V1.0 SDK存在體驗不一致、身份鑒權資訊無法隔離等問題,官方不再推薦您繼續使用。

以下是V1.0 SDK的簡單模型圖。

阿里雲 V1.0 SDK 主要分為三層:

  1. 產品SDK層,處理OpenAPI業務相關的參數。

  2. 核心SDK層,過渡OpenAPI業務參數到HTTP請求參數。

  3. HTTP Client層,真正發起請求的部分。

在使用V1.0 SDK方式整合雲產品服務時,我們通常需要引入核心SDK產品SDK

程式碼範例

當我們同時調用多個不同產品的OpenAPI時,通用的Client對象無法按照產品維度進行隔離,且容易產生安全執行緒問題。

<!-- ECS sdk -->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-ecs</artifactId>
    <version>5.11.7</version>
</dependency>
<!-- core sdk -->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.6.1</version>
</dependency>
package com.example;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import com.aliyuncs.ecs.model.v20140526.*;

public class DescribeInstanceStatus {

    public static void main(String[] args) {
        // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID
        // and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
        DefaultProfile profile = DefaultProfile.getProfile(
                "<YOUR-REGION-ID>",
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        );

        // use STS Token
        // DefaultProfile profile = DefaultProfile.getProfile(
        //  "<YOUR-REGION-ID>",                                 // The region ID
        //  System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),       // The AccessKey ID of the RAM account
        //  System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),   // The AccessKey Secret of the RAM account
        //  System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")       // STS Token
        // );

        // init acs client
        IAcsClient client = new DefaultAcsClient(profile);

        // Create the request to query instance status
        DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest();
        request.setRegionId("<YOUR-REGION-ID>");

        try {
            DescribeInstanceStatusResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
        } 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());
        }
    }
}

V2.0 SDK(推薦)

阿里雲V1.0 SDK是較早使用的版本,不少老使用者習慣於V1.0的開發。阿里雲V2.0 SDK是通過總結開發人員在 V1.0中遇到的一系列問題後重新開發的一版SDK,新增了許多特性,主要以易於使用者理解,降低使用者接入成本並提升SDK的健壯性為主。

V2.0 SDK是基於阿里雲自研的DSL語言Darabonba產生。DSL的靈活性不僅可以進行更多表達,而且通過解析DSL產生的AST也能抹平阿里雲不同產品生產的不同風格OpenAPI的差異,輕鬆實現OpenAPI到SDK的產生。與V1.0相比,阿里雲V2.0 SDK具備以下新特性:

  • 使用體驗一致:解決V1.0 SDK中產品OpenAPI風格不同(RPC或ROA)造成使用方式不一致的問題。升級版SDK中所有雲產品的SDK使用方式相同,使用體驗一致。

  • 開發成本降低:通過DSL使SDK具備邏輯表達能力,解決了V1.0 SDK與SDK Core耦合性高的問題,降低了開發人員因為SDK的升級帶來的開發成本。

  • 身份和鑒權資訊隔離:每個雲產品的SDK提供一個Client對象,通過執行個體化Client對象就可以調用雲產品的所有API。通過這樣的方式,不僅解決了V1.0 SDK單Client容易造成安全執行緒的問題,同時通過該方式使每個雲產品之間身份和鑒權資訊隔離,從而解決了使用者使用V1.0 SDK造成的profile資訊在不同產品之間混用導致的許可權管理問題。使用者也可以根據不同雲產品OpenAPI的情況配置不同參數,例如服務地區、逾時時間、HTTP代理、重試配置等。

  • 支援複雜情境:V2.0 SDK支援更複雜的OpenAPI使用情境,例如智能視覺開放平台的人臉人體(FaceBody)功能需要上傳圖片到OSS以後,通過產生的連結對圖片進行人工智慧分析處理,就可以通過V2.0 SDK將上傳鑒權、上傳圖片、圖片分析三個操作組合,從而簡化OpenAPI的使用。

  • 提供情境化樣本:V2.0 SDK不僅為SDK中的所有的OpenAPI請求產生相應的樣本,同時也通過對SDK中的多個OpenAPI請求進行組合,從而提供SDK的情境化樣本,這樣的樣本不僅可以協助開發人員降低接入 SDK的成本,也可以協助開發人員更好地理解雲產品的業務情境。

因此,對於新使用者建議直接使用V2.0 SDK,老使用者也建議儘早遷移到V2.0 SDK。

程式碼範例

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>ecs20140526</artifactId>
  <version>5.1.8</version>
</dependency>
package com.example;

import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.DescribeInstanceStatusRequest;

public class Sample {

    public static void main(String[] args) throws Exception {
        Config config = new Config();
        // 必填,您的 AccessKey ID, 請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID
        config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        // 必填,您的 AccessKey Secret, 請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET
        config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // ECS 的 Endpoint, 請參考 https://api.aliyun.com/product/Ecs
        config.setEndpoint("<Endpoint>");
        Client client = new Client(config);
        DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest()
                .setRegionId("<YOUR-REGION-ID>");
        try {
            // 複製代碼運行請自行列印 API 的傳回值
            client.describeInstanceStatus(request);
        } catch (TeaException error) {
            error.printStackTrace();
        } catch (Exception error) {
            error.printStackTrace();
        }
    }
}

查看SDK的依賴資訊

  1. 開啟阿里雲OpenAPI開發人員門戶,選擇產品與服務,以專用網路為樣本。

image

  1. 選擇SDK 版本

image

  1. 選擇語言,在安裝方式中可以查看產品對應語言所需的SDK依賴資訊,在概述中查看SDK最新版本。

image