全部產品
Search
文件中心

Alibaba Cloud SDK:整合SDK

更新時間:May 15, 2025

在調用OpenAPI時,建議採用在專案中整合SDK的方式。使用SDK可以簡化開發流程,實現功能的快速整合,同時有效降低維護成本。本文將詳細介紹如何在專案中安裝SDK以及使用SDK開發。

環境要求

PHP >= 5.5

安裝SDK

由於在安裝雲產品PHP V1.0 SDK時會自動安裝核心SDK,所以在實際應用過程中僅需要安裝雲產品SDK即可。

雲產品SDK

雲產品的V1.0 SDK主要包括的是OpenAPI的Request以及Response對象,還包含了傳回值序列化邏輯的Unmarshaller對象。以雲產品ECS的V1.0 SDK的為例,引入產品SDK依賴的方式如下:

# ECS V1.0 SDK
composer require alibabacloud/ecs

V1.0 SDK的命名方式為alibabacloud/${產品名}的方式命名。開發人員也可以通過SDK 中心來查看具體產品的V1.0 SDK資訊。

核心SDK

核心SDK主要包含在調用OpenAPI時所需的Client對象、簽名邏輯以及異常處理等功能。當您使用泛化調用或者單獨安裝某一個版本的核心SDK時,可以執行以下安裝命令:

composer require alibabacloud/client

最新版本資訊請參見alibabacloud/client - Packagist

使用SDK

本文將以調用ECSDescribeInstances介面為例,為您分步介紹如何使用V1.0 SDK。

1. 初始化請求用戶端

所有的OpenAPI均通過核心SDK提供的Client發起調用,因此在調用OpenAPI之前,需要先進行用戶端初始化。這裡以使用AK初始化方式為例,更多用戶端初始化方式請參見管理訪問憑據

說明

樣本採用讀取環境變數的方式擷取憑證,運行代碼前需配置環境變數ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具體操作,請參見在Linux、macOS和Windows系統配置環境變數

use AlibabaCloud\Client\AlibabaCloud;

// Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
AlibabaCloud::accessKeyClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))
            ->regionId('<REGION_ID>')
            ->asDefaultClient();

2. 構造OpenAPI請求參數對象

可以使用雲產品SDK中提供的請求參數對象封裝請求參數。

use AlibabaCloud\Ecs\Ecs;

// 構造請求參數    
$request = Ecs::v20140526()
    ->describeInstances() // 建立對應API的請求參數對象
    ->withInstanceIds(json_encode(["i-bp1dXXXXXXXXXXXX"])) // 請求參數InstanceIds,請根據實際情況填寫
    ->withPageSize(10) // 請求參數PageSize,請根據實際情況填寫
    ->withPageNumber(1); // 請求參數PageNumber,請根據實際情況填寫

3. 發起請求

調用request()函數發起請求。

$result = $request
    ->debug(true) // 開啟調試會輸出詳細資料
    ->request(); // 執行請求
print_r($result->toArray()); // 列印API返回結果

4. 異常處理

在調用OpenAPI時如果發生異常,您可以通過捕獲ServerException和ClientException來擷取錯誤資訊。

完整範例程式碼

<?php
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
use AlibabaCloud\Ecs\Ecs;

require_once 'vendor/autoload.php';

try {
    // 從環境變數中擷取RAM帳號的ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET
    AlibabaCloud::accessKeyClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))
        ->regionId('cn-hangzhou') // 地區ID,以cn-hangzhou為例
        ->asDefaultClient();

    // 構造請求參數    
    $request = Ecs::v20140526()
        ->describeInstances()
        ->withInstanceIds(json_encode(["i-bp1dXXXXXXXXXXXX"]))
        ->withPageSize(10)
        ->withPageNumber(1);

    $result = $request
        ->debug(true)
        ->request();
    print_r($result->toArray());
} catch (ClientException $exception) {
    # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
    echo $exception->getMessage() . PHP_EOL;
} catch (ServerException $exception) {
    # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
    echo $exception->getMessage() . PHP_EOL;
    echo $exception->getErrorCode() . PHP_EOL;
    echo $exception->getRequestId() . PHP_EOL;
    echo $exception->getErrorMessage() . PHP_EOL;
}

相關文檔