客户端的初始化和请求方式

更新时间:

本节主要是介绍客户端的Client初始化方式以及如何发起OpenAPI请求。

SDK客户端初始化

V1.0 SDK因为是所有产品的SDK共用一个SDK Core,所以通过共用SDK Core中的方法,初始化生成一个client对象,来处理所有产品的请求。下面是V1.0 SDK客户端初始化的示例:

<?php
    
use AlibabaCloud\Client\AlibabaCloud;
    
// 创建一个客户端并链式调用设置其它选项
AlibabaCloud::accessKeyClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))
            ->regionId('cn-hangzhou') // 设置客户端区域,使用该客户端且没有单独设置的请求都使用此设置
            ->timeout(1) // 超时1秒,使用该客户端且没有单独设置的请求都使用此设置
            ->connectTimeout(0.1) // 配置连接超时为10毫秒,当值小于1时,自动转换为毫秒,使用该客户端且没有单独设置的请求都使用此设置
            ->debug(true) // 开启调试,CLI下会输出详细信息,使用该客户端且没有单独设置的请求都使用此设置
            ->name('client1');


// 设置默认区域,当某个请求和请求的客户端没有设置区域,则使用默认区域
AlibabaCloud::setDefaultRegionId('cn-hangzhou');

// 获取默认区域
AlibabaCloud::getDefaultRegionId();
    
// 获取所有客户端
AlibabaCloud::all();

// 获取指定客户端,不存在则抛出异常
AlibabaCloud::get('client1');
    
// 获取指定客户端的 Access Key
AlibabaCloud::get('client1')->getCredential()->getAccessKeyId();

// 给指定客户端起一个新名字
AlibabaCloud::get('client1')->name('otherName');

// 获取默认客户端的区域,等等
AlibabaCloud::getDefaultClient()->regionId;
 
// 判断指定名称客户端是否存在
AlibabaCloud::has('client1');
    
// 删除一个客户端
AlibabaCloud::del('client1');

// 清除所有客户端配置
AlibabaCloud::flush();

// 根据默认配置文件创建客户端,文件不存在跳过,文件解析错误抛出异常
AlibabaCloud::load();

// 指定配置文件创建客户端,文件不存或解析错误将抛出异常
AlibabaCloud::load('your/path/file', 'vfs://AlibabaCloud/credentials', '...');

// 获取某种客户端的 AccessKey 或 STS 访问凭据,若该客户端本属于该凭据则直接返回
AlibabaCloud::ecsRamRoleClient('role')->getSessionCredential();

// 获取指定客户端的 AccessKey 或 STS 访问凭据,若该客户端本属于该凭据则直接返回
AlibabaCloud::get('client1')->getSessionCredential();
说明

单Client的模式存在线程不安全的问题,而且通过一个profile信息在不同产品之间混用,容易造成的权限管理问题,建议您使用V2.0 SDK开发。

OpenAPI请求方式

PHP V1.0 SDK支持泛化调用(使用CommonRequest调用)和特化调用,更多信息,请参见泛化调用与特化调用

使用CommonRequest调用

只需核心包即可发起调用,无需安装各云产品的SDK。通过SDK Core发起OpenAPI请求,更多详情,请参见使用CommonRequest进行调用

使用云产品SDK提供的特化调用

需要安装云产品SDK,云产品获取方式:

  1. 访问SDK 中心

  2. 在顶部菜单栏选择云产品,例如选择云服务器ECS。

  3. 选择API 版本,如果云产品有多个版本,请选择推荐版本或者最新版本。

  4. 选择SDK 代系,选择V1.0

  5. 所有语言中选择PHP

  6. 安装方式中复制命令到终端执行。

# ECS V1.0 SDK
composer require alibabacloud/ecs 1.8.883 
composer require alibabacloud/client

请求示例

<?php

require_once 'vendor/autoload.php';

use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
use AlibabaCloud\Ecs\Ecs;

try {
    // 请确保已设置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    AlibabaCloud::accessKeyClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'));
    $request = Ecs::v20140526()->describeRegions();
    $result = $request
        ->regionId('cn-hangzhou') // 指定regionId
        ->host("ecs.cn-hangzhou.aliyuncs.com") // 指定endpoint
        ->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;
}