SDK 客户端的初始化和请求方式
本节主要介绍升级版 SDK 对于客户端的初始化以及 OpenAPI 请求方式。
SDK 客户端初始化
升级版 SDK 中因为具备完整的参数处理、返回值处理以及请求逻辑,所以可以给不同云产品的 SDK 生成不同的 Client 并包含其产品下所有的 OpenAPI 请求方法,可以使不同云产品之间的身份及鉴权信息隔离,使用上更加安全,下面是产品 ECS 和短信服务的升级版 SDK 初始化示例:
依赖信息
产品依赖在接入不同产品时需要不同的依赖声明,您可在OpenAPI门户各产品的SDK信息窗口查看。
ECS产品依赖:
composer require alibabacloud/ecs-20140526 3.0.6
短信服务产品依赖:
composer require alibabacloud/dysmsapi-20170525 2.0.23
代码示例
本示例代码身份验证方案为配置环境变量,执行以下代码之前需先配置环境变量,了解更多请参见身份验证配置。
export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id>
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
<?php
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs as Ecs;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi as DysmsAPI;
// composer 自动加载机制,require_once(vendor目录下autoload.php文件)
require_once('../vendor/autoload.php');
// 使用默认凭证初始化Credentials Client。
$credential = new Credential([]);
$config = new Config([
// 使用 credential 配置凭证
'credential' => $credential,
// 产品服务域名(endpoint)
'endpoint' => 'ecs.aliyuncs.com'
]);
// 初始化 ECS client
$ecsClient = new Ecs($config);
// 产品服务域名(endpoint)
$config->endpoint = 'dysmsapi.aliyuncs.com';
// 初始化dysmsapi产品包的Client类
$dysmsApiClient = new DysmsAPI($config);
OpenAPI 请求方式
升级版 SDK 中每个产品的 Client 包含了所有的 OpenAPI,所以可以指定 OpenAPI 请求方法来请求,其方法名对应 OpenAPI 首字母小写,一般有三个:
可以不用传入运行参数的请求方法。
代码示例
<?php
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
// composer 自动加载机制,require_once(vendor目录下autoload.php文件)
require_once('../vendor/autoload.php');
// 使用默认凭证初始化Credentials Client。
$credential = new Credential([]);
$config = new Config([
// 使用 credential 配置凭证
'credential' => $credential,
// 产品服务域名
'endpoint' => 'ecs.aliyuncs.com'
]);
$request = new DescribeRegionsRequest();
$client = new Ecs($config);
$response = $client->describeRegions($request);
var_dump($response);
需要传入运行参数的请求方法。
代码示例
<?php
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
// composer 自动加载机制,require_once(vendor目录下autoload.php文件)
require_once('../vendor/autoload.php');
// 使用默认凭证初始化Credentials Client。
$credential = new Credential([]);
$config = new Config([
// 使用 credential 配置凭证
'credential' => $credential,
// 产品服务域名
'endpoint' => 'ecs.aliyuncs.com'
]);
$request = new DescribeRegionsRequest();
$runtime = new RuntimeOptions();
$client = new Ecs($config);
try {
$response = $client->describeRegionsWithOptions($request, $runtime);
var_dump($response);
} catch (TeaUnableRetryError $e) {
var_dump($e->getMessage());
var_dump($e->getErrorInfo());
var_dump($e->getLastException());
var_dump($e->getLastRequest());
}
需要进行文件上传的请求方法,该方法默认需要传入运行时参数,这种方法只有需要用到文件上传的 OpenAPI 才会具备。
代码示例
composer require alibabacloud/facebody-20191230 3.0.9
<?php
use Darabonba\OpenApi\Models\Config;
use GuzzleHttp\Psr7\Stream;
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\SDK\Facebody\V20191230\Facebody;
use AlibabaCloud\SDK\Facebody\V20191230\Models\DetectBodyCountAdvanceRequest;
// composer 自动加载机制,require_once(vendor目录下autoload.php文件)
require_once('../vendor/autoload.php');
$credential = new Credential([]);
$config = new Config([
// 使用 credential 配置凭证
'credential' => $credential,
// 产品服务域名
'endpoint' => 'facebody.cn-shanghai.aliyuncs.com'
]);
$request = new DetectBodyCountAdvanceRequest();
// 读取文件并将文件流配置给SDK请求对象
$request->imageURLObject = new Stream(fopen("<filepath>","rb"));
$runtime = new RuntimeOptions();
$client = new Facebody($config);
try {
// 调用本地文件上传方法,将文件上传
$response = $client->detectBodyCountAdvance($request, $runtime);
var_dump($response);
} catch (TeaError $e) {
var_dump($e->getMessage());
var_dump($e->getErrorInfo());
var_dump($e->getLastException());
var_dump($e->getLastRequest());
}