本文以调用Function AI的查询项目接口GetProject为例,介绍PHP SDK的安装和使用。关于GetProject接口的API文档,请参见GetProject - 查询项目。
前提条件
调用阿里云OpenAPI通常需要设置访问密钥(AccessKey),由于阿里云账号(主账号)拥有资源的所有权限,AccessKey一旦泄露风险巨大,所以建议您使用满足最小化权限需求的RAM用户的AccessKey。
在环境变量中配置AccessKey
具体操作步骤,请参见在Linux、macOS和Windows系统配置环境变量。
环境要求
1.最低要求PHP 5.6
2.必须在系统上全局安装Composer
执行 composer 安装 SDK 的 PHP 版本要小于或等于实际运行时的 PHP 版本。 例如,在 PHP7.2 环境下安装 SDK 后生成 vendor 目录,只能在 PHP7.2 以上版本使用,如果拷贝到 PHP5.6 环境下使用,会出现依赖版本不兼容问题。
一些用户可能由于网络问题无法安装,可以通过以下命令使用阿里云 Composer 全量镜像。
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
安装方式
复制下方提供的安装命令在Terminal中执行,以完成Function AI SDK的安装:
composer require alibabacloud/devs-20230714
使用SDK
1.初始化客户端
在SDK中,所有的OpenAPI均通过SDK提供的请求客户端(Client)发起调用。因此,在调用OpenAPI之前,需要先对请求客户端进行初始化。请求客户端支持多种方式初始化,本示例以通过AccessKey初始化客户端为例。更多初始化方式请参见管理访问凭据。
<?php
require_once 'vendor/autoload.php';
use AlibabaCloud\SDK\Devs\V20230714\Devs;
use Darabonba\OpenApi\Models\Config;
class Sample
{
public static function createClient()
{
$config = new Config([
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID
"accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET
"accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
// 必填,Devs服务的Endpoint,详情请参考 https://api.aliyun.com/product/Devs
"endpoint" => "devs.cn-hangzhou.aliyuncs.com",
]);
return new Devs($config);
}
}
2.构建接口的请求对象
在发起调用前,请查看该接口的API文档获取参数信息
与部分需要构建复杂Request对象的接口不同,GetProject接口的主要参数projectName是直接作为字符串传入的。
// 准备要查询的项目名称
$projectName = "my-devs-project"; // 请将此处替换为您的真实项目名称
// 创建运行时配置对象
$runtime = new RuntimeOptions();
3.发起调用
通过客户端调用OpenAPI时,支持设置运行时参数,例如超时配置、代理配置等,更多信息请查看进阶配置。
接口返回对象命名规则:{API名称}Response,例如GetProject该接口的返回对象为GetProjectResponse。
// 发起请求
$response = $client->getProjectWithOptions($projectName, $headers, $runtime);
// 打印返回结果
echo json_encode($response->body, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n";
4.异常处理
PHP SDK将异常进行了细致的分类,在调用API时,建议采取合理的措施来处理可能发生的异常,以确保程序的健壮性。
TeaError
:在SDK的请求中,主要以API返回的业务报错为主,例如参数错误、资源不存在等。可以通过getCode()
和getMessage()
获取服务端返回的明确错误信息来调试。Exception
:其他可能发生的异常,例如网络问题。
更多关于异常处理的介绍,请参见异常处理。
建议采取合理的措施来处理异常,比如合理地传播异常、记录日志、尝试恢复等,以确保系统的健壮性和稳定性。
5.完整示例
<?php
// 引入Composer的自动加载文件
require_once __DIR__ . '/vendor/autoload.php';
// 引入所有必需的类
use AlibabaCloud\SDK\Devs\V20230714\Devs;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Dara\Models\RuntimeOptions;
use AlibabaCloud\Tea\Exception\TeaError;
/**
* 使用 Alibaba Cloud Devs SDK 查询项目信息的示例
*/
class GetProjectSample
{
public static function main()
{
try {
// 1. 初始化客户端
// SDK会通过环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET 自动获取凭证
$config = new Config([
"accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
"accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
"endpoint" => "devs.cn-hangzhou.aliyuncs.com",
]);
$client = new Devs($config);
// 2. 准备API调用参数
$projectName = "my-devs-project"; // 请将此处替换为您的真实项目名称
$runtime = new RuntimeOptions();
$headers = [];
// 3. 发起API调用
$response = $client->getProjectWithOptions($projectName, $headers, $runtime);
// 4. 处理成功响应
echo " API 调用成功!\n";
// 使用PHP标准的 json_encode() 函数来打印对象,并使用 JSON_PRETTY_PRINT 美化输出
echo json_encode($response->body, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n";
} catch (Exception $error) {
// 5. 处理异常情况
echo " API 调用失败!\n";
if ($error instanceof TeaError) {
echo " 错误码 (Code): " . $error->getCode() . "\n";
echo " 错误信息 (Message): " . $error->getMessage() . "\n";
echo " 请求ID (RequestId): " . ($error->data['RequestId'] ?? 'N/A') . "\n";
} else {
echo " 发生未知异常: " . $error->getMessage() . "\n";
}
}
}
}
// 执行主函数
GetProjectSample::main();
更多内容
除了使用上述调用方式外,您还可以使用泛化调用方式调用Function AI的OpenAPI,详细介绍请参见泛化调用。