集成SDK

更新时间:

在调用OpenAPI时,建议采用在项目中集成SDK的方式。使用SDK可以简化开发流程,实现功能的快速集成,同时有效降低维护成本。本文将详细介绍如何在项目中安装SDK以及使用SDK开发。

环境要求

PHP >= 5.5

安装SDK

由于在安装云产品PHP V1.0 SDK时会自动安装核心SDK,所以在实际应用过程中仅需要安装云产品SDK即可。

云产品SDK

云产品的V1.0 SDK主要包括的是OpenAPIRequest以及Response对象,还包含了返回值序列化逻辑的Unmarshaller对象。以云产品ECSV1.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、macOSWindows系统配置环境变量

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时如果发生异常,您可以通过捕获ServerExceptionClientException来获取错误信息。

完整示例代码

<?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;
}

相关文档