客户端的初始化和请求方式
更新时间:
本节主要是介绍客户端的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,云产品获取方式:
访问SDK 中心。
在顶部菜单栏选择云产品,例如选择云服务器ECS。
选择API 版本,如果云产品有多个版本,请选择推荐版本或者最新版本。
选择SDK 代系,选择V1.0。
在所有语言中选择PHP。
在安装方式中复制命令到终端执行。
# 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;
}
文档内容是否对您有帮助?