日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

泛化調用與特化調用

更新時間:

本文詳細介紹了阿里云SDK的泛化調用與特化調用的區別,通過集成后代碼包大小、開發體驗等方面為您闡述了泛化調用和特化調用的優缺點,為您提供了詳盡的技術分析,幫助您做出更合適的技術選擇,并通過示例代碼加速您的項目開發流程。

泛化調用

指以一種通用的方式調用服務。阿里云SDK的泛化調用是指通過使用阿里云SDK的核心模塊,構造入參對象,調用通用的函數發起請求,以通用對象的方式獲取返回結果。

特化調用

是一種基于具體接口和服務定義的調用方式調用服務。阿里云SDK的特化調用是完全依賴OpenAPI元信息構造對應的請求Client、入參對象、出參對象,開發者可以根據IDE的提示輕松填寫必要參數及獲取返回結果。

如何選擇

泛化調用

優點:集成后代碼包體積小,適配產品范圍大,無論使用多少產品,僅需幾個核心依賴包。

缺點:開發過程中需要文檔指導,沒有 IDE 提示,開發體驗會差一些。

特化調用

優點:開發體驗良好,IDE 可以提供參數名,方法名,類型等。

缺點:

  1. 如果產品沒有發布對應的阿里云SDK,則無法使用

  2. 如果使用的產品較多,需要安裝較多的 SDK 包,代碼體積會偏大一點。

重要

V1.0版本SDK的JavaScript語言,只支持泛化調用,而不支持特化調用。

示例代碼

我們以V2.0版本的SDK為例,介紹泛化調用和特化調用在代碼寫法上的差異。

泛化調用

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>tea-openapi</artifactId>
    <version>0.2.8</version>
</dependency>
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.teaopenapi.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);
        // Endpoint 請參考 https://api.aliyun.com/product/Ecs
        config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
        return new com.aliyun.teaopenapi.Client(config);
    }

    /**
     * API 相關
     * @return OpenApi.Params
     */
    public static com.aliyun.teaopenapi.models.Params createApiInfo() throws Exception {
        com.aliyun.teaopenapi.models.Params params = new com.aliyun.teaopenapi.models.Params()
                // 接口名稱
                .setAction("DescribeInstanceStatus")
                // 接口版本
                .setVersion("2014-05-26")
                // 接口協議
                .setProtocol("HTTPS")
                // 接口 HTTP 方法
                .setMethod("POST")
                .setAuthType("AK")
                .setStyle("RPC")
                // 接口 PATH
                .setPathname("/")
                // 接口請求體內容格式
                .setReqBodyType("json")
                // 接口響應體內容格式
                .setBodyType("json");
        return params;
    }

    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 方式。更多鑒權訪問方式,請參見V2.0 Java SDK身份驗證章節。
        com.aliyun.teaopenapi.Client client = Sample.createClient(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        com.aliyun.teaopenapi.models.Params params = Sample.createApiInfo();
        // query params
        java.util.Map<String, Object> queries = new java.util.HashMap<>();
        queries.put("RegionId", "cn-hangzhou");
        // runtime options
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        com.aliyun.teaopenapi.models.OpenApiRequest request = new com.aliyun.teaopenapi.models.OpenApiRequest()
                .setQuery(com.aliyun.openapiutil.Client.query(queries));
        // 復制代碼運行請自行打印 API 的返回值
        // 返回值為 Map 類型,可從 Map 中獲得三類數據:響應體 body、響應頭 headers、HTTP 返回的狀態碼 statusCode。
        client.callApi(params, request, runtime);
    }
}
說明

通過com.aliyun.teaopenapi創建通用的ClientParamsOpenApiRequest對象,通過調用callApi函數返回OpenApiResponse。在OpenAPI門戶開放的OpenAPI均可采用該方式進行調用。

特化調用

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>ecs20140526</artifactId>
  <version>5.1.8</version>
</dependency>
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);
        // Endpoint 請參考 https://api.aliyun.com/product/Ecs
        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 方式。更多鑒權訪問方式,請參見V2.0 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.DescribeInstanceStatusRequest describeInstanceStatusRequest = new com.aliyun.ecs20140526.models.DescribeInstanceStatusRequest()
                .setRegionId("cn-hangzhou");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 復制代碼運行請自行打印 API 的返回值
            client.describeInstanceStatusWithOptions(describeInstanceStatusRequest, 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);
        }        
    }
}
說明

每個OpenAPI根據接口定義自動生成客戶端對象com.aliyun.ecs20140526.Client及調用函數describeInstanceStatusWithOptions、入參對象com.aliyun.ecs20140526.models.DescribeInstanceStatusRequest、出參對象com.aliyun.ecs20140526.models.DescribeInstanceStatusResponse