本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 适用于 PHP 的 AWS SDK 版本 3 提出 AWS 服务 请求
SDK 请求工作流程概述
使用 适用于 PHP 的 AWS SDK 版本 3 在所有版本中都遵循一致的模式 AWS 服务。基本工作流程包括三个主要步骤:
以下各节将详细说明每个步骤,首先介绍如何创建和配置服务客户端。
创建基本服务客户端
您可以通过向客户端的构造函数传递选项的关联数组来创建客户端。
导入
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException;
示例代码
//Create an S3Client $s3 = new Aws\S3\S3Client([ 'region' => 'us-east-2' // Since version 3.277.10 of the SDK, ]); // the 'version' parameter defaults to 'latest'.
有关可选“版本”参数的信息,请参阅配置选项主题。
请注意,我们并未向客户端显式提供凭证。这是因为 SDK 使用默认的凭证提供商链来查找凭证信息。
在 适用于 PHP 的 AWS SDK 版本 3 的客户端构造器选项 中详细介绍了所有通用的客户端配置选项。创建的客户端不同,提供的选项数组也不同。每个客户端的 API 文档中介绍了这些自定义客户端配置选项。
虽然上面的示例显示了基本的客户端创建,但您可以自定义服务客户端以满足特定要求。有关通过代码配置服务客户端的更多详细信息,请参阅在 适用于 PHP 的 AWS SDK 版本 3 的代码中配置服务客户端。如果需要使用外部配置文件或环境变量配置服务客户端,请参阅在外部配置 适用于 PHP 的 AWS SDK 版本 3 的服务客户端。
提出请求
您可以通过在客户端对象上调用同名方法来发出服务请求。例如,要执行 Amazon S3 PutObject操作,您需要调用Aws\S3\S3Client::putObject()
方法。
导入
require 'vendor/autoload.php'; use Aws\S3\S3Client;
示例代码
// Use the us-east-2 region and latest version of each client. $sharedConfig = [ 'profile' => 'default', 'region' => 'us-east-2' ]; // Create an SDK class used to share configuration across clients. $sdk = new Aws\Sdk($sharedConfig); // Use an Aws\Sdk class to create the S3Client object. $s3Client = $sdk->createS3(); // Send a PutObject request and get the result object. $result = $s3Client->putObject([ 'Bucket' => 'my-bucket', 'Key' => 'my-key', 'Body' => 'this is the body!' ]); // Download the contents of the object. $result = $s3Client->getObject([ 'Bucket' => 'my-bucket', 'Key' => 'my-key' ]); // Print the body of the result by indexing into the result object. echo $result['Body'];
客户端提供的操作,以及输入、输出的结构是根据服务描述文件在运行时定义的。创建客户端时,如果您未提供服务模型的version
参数(例如,“2006-03-01” 或 “最新”),则客户端将默认为最新版本。开发工具包会根据提供的版本找到相应的配置文件。
所有操作方法 (如 putObject()
) 均接受单独的参数,或代表操作参数的关联数组。此数组的结构(以及结果对象的结构)是在开发工具包的 API 文档中针对每个操作进行定义的(例如,请参阅 API 文档中的 putObject 操作)。
HTTP 处理程序选项
您还可以使用特殊的 @http
参数微调底层 HTTP 处理程序执行请求的方式。可包含在 @http
参数中的选项与您在使用“http”客户端选项对客户端进行实例化时可设置的选项相同。
// Send the request through a proxy $result = $s3Client->putObject([ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'my-key', 'Body' => 'this is the body!', '@http' => [ 'proxy' => 'http://192.168.16.1:10' ] ]);
使用 Result 对象
执行成功的操作会返回 Aws\Result
对象。开发工具包不会返回服务的原始 XML 或 JSON 数据,而是会将响应数据强制加入关联数组结构中。这样可以根据它对特定服务和底层响应结构的认知,将数据的某些方面规范化。
你可以像关联 PHP 数组一样访问AWS\Result
对象中的数据。
导入
require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException;
示例代码
// Use the us-east-2 region and latest version of each client. $sharedConfig = [ 'profile' => 'default', 'region' => 'us-east-2', ]; // Create an SDK class used to share configuration across clients. $sdk = new Aws\Sdk($sharedConfig); // Use an Aws\Sdk class to create the S3Client object. $s3 = $sdk->createS3(); $result = $s3->listBuckets(); foreach ($result['Buckets'] as $bucket) { echo $bucket['Name'] . "\n"; } // Convert the result object to a PHP array $array = $result->toArray();
结果对象的内容取决于执行的操作和服务的版本。每个 API 操作的结果结构均记录在每个操作的 API 文档中。
SDK 集成了用于搜索和操作 J SON 数据的 DSLsearch()
方法,可用于更具声明性地从结果中提取数据。
示例代码
$s3 = $sdk->createS3(); $result = $s3->listBuckets();
$names = $result->search('Buckets[].Name');