客戶端的初始化和請(qǐng)求方式
更新時(shí)間:
本節(jié)主要是介紹客戶端的Client初始化方式以及如何發(fā)起OpenAPI請(qǐng)求。
SDK客戶端初始化
V1.0 SDK因?yàn)槭撬挟a(chǎn)品的SDK共用一個(gè)SDK Core,所以通過共用SDK Core中的方法,初始化生成一個(gè)client對(duì)象,來處理所有產(chǎn)品的請(qǐng)求。下面是V1.0 SDK客戶端初始化的示例:
<?php
use AlibabaCloud\Client\AlibabaCloud;
// 創(chuàng)建一個(gè)客戶端并鏈?zhǔn)秸{(diào)用設(shè)置其它選項(xiàng)
AlibabaCloud::accessKeyClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'))
->regionId('cn-hangzhou') // 設(shè)置客戶端區(qū)域,使用該客戶端且沒有單獨(dú)設(shè)置的請(qǐng)求都使用此設(shè)置
->timeout(1) // 超時(shí)1秒,使用該客戶端且沒有單獨(dú)設(shè)置的請(qǐng)求都使用此設(shè)置
->connectTimeout(0.1) // 配置連接超時(shí)為10毫秒,當(dāng)值小于1時(shí),自動(dòng)轉(zhuǎn)換為毫秒,使用該客戶端且沒有單獨(dú)設(shè)置的請(qǐng)求都使用此設(shè)置
->debug(true) // 開啟調(diào)試,CLI下會(huì)輸出詳細(xì)信息,使用該客戶端且沒有單獨(dú)設(shè)置的請(qǐng)求都使用此設(shè)置
->name('client1');
// 設(shè)置默認(rèn)區(qū)域,當(dāng)某個(gè)請(qǐng)求和請(qǐng)求的客戶端沒有設(shè)置區(qū)域,則使用默認(rèn)區(qū)域
AlibabaCloud::setDefaultRegionId('cn-hangzhou');
// 獲取默認(rèn)區(qū)域
AlibabaCloud::getDefaultRegionId();
// 獲取所有客戶端
AlibabaCloud::all();
// 獲取指定客戶端,不存在則拋出異常
AlibabaCloud::get('client1');
// 獲取指定客戶端的 Access Key
AlibabaCloud::get('client1')->getCredential()->getAccessKeyId();
// 給指定客戶端起一個(gè)新名字
AlibabaCloud::get('client1')->name('otherName');
// 獲取默認(rèn)客戶端的區(qū)域,等等
AlibabaCloud::getDefaultClient()->regionId;
// 判斷指定名稱客戶端是否存在
AlibabaCloud::has('client1');
// 刪除一個(gè)客戶端
AlibabaCloud::del('client1');
// 清除所有客戶端配置
AlibabaCloud::flush();
// 根據(jù)默認(rèn)配置文件創(chuàng)建客戶端,文件不存在跳過,文件解析錯(cuò)誤拋出異常
AlibabaCloud::load();
// 指定配置文件創(chuàng)建客戶端,文件不存或解析錯(cuò)誤將拋出異常
AlibabaCloud::load('your/path/file', 'vfs://AlibabaCloud/credentials', '...');
// 獲取某種客戶端的 AccessKey 或 STS 訪問憑據(jù),若該客戶端本屬于該憑據(jù)則直接返回
AlibabaCloud::ecsRamRoleClient('role')->getSessionCredential();
// 獲取指定客戶端的 AccessKey 或 STS 訪問憑據(jù),若該客戶端本屬于該憑據(jù)則直接返回
AlibabaCloud::get('client1')->getSessionCredential();
說明
單Client的模式存在線程不安全的問題,而且通過一個(gè)profile信息在不同產(chǎn)品之間混用,容易造成的權(quán)限管理問題,建議您使用V2.0 SDK開發(fā)。
OpenAPI請(qǐng)求方式
PHP V1.0 SDK支持泛化調(diào)用(使用CommonRequest調(diào)用)和特化調(diào)用,更多信息,請(qǐng)參見泛化調(diào)用與特化調(diào)用。
使用CommonRequest調(diào)用
只需核心包即可發(fā)起調(diào)用,無需安裝各云產(chǎn)品的SDK。通過SDK Core發(fā)起OpenAPI請(qǐng)求,更多詳情,請(qǐng)參見使用CommonRequest進(jìn)行調(diào)用。
使用云產(chǎn)品SDK提供的特化調(diào)用
需要安裝云產(chǎn)品SDK,云產(chǎn)品獲取方式:
訪問SDK 中心。
在頂部菜單欄選擇云產(chǎn)品,例如選擇云服務(wù)器ECS。
選擇API 版本,如果云產(chǎn)品有多個(gè)版本,請(qǐng)選擇推薦版本或者最新版本。
選擇SDK 代系,選擇V1.0。
在所有語言中選擇PHP。
在安裝方式中復(fù)制命令到終端執(zhí)行。
# ECS V1.0 SDK
composer require alibabacloud/ecs 1.8.883
composer require alibabacloud/client
請(qǐng)求示例
<?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 {
// 請(qǐng)確保已設(shè)置環(huán)境變量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) {
// 此處僅做打印展示,請(qǐng)謹(jǐn)慎對(duì)待異常處理,在工程項(xiàng)目中切勿直接忽略異常。
echo $exception->getMessage() . PHP_EOL;
} catch (ServerException $exception) {
// 此處僅做打印展示,請(qǐng)謹(jǐn)慎對(duì)待異常處理,在工程項(xiàng)目中切勿直接忽略異常。
echo $exception->getMessage() . PHP_EOL;
echo $exception->getErrorCode() . PHP_EOL;
echo $exception->getRequestId() . PHP_EOL;
echo $exception->getErrorMessage() . PHP_EOL;
}
文檔內(nèi)容是否對(duì)您有幫助?