このトピックでは、PHP 向け Alibaba Cloud SDK V2.0 の例外の種類と例外の処理方法について説明します。
PHP 向け Alibaba Cloud SDK V2.0 の使用時に発生する可能性のある例外は、以下の種類に分類できます。
InvalidArgumentException: この例外は、SDK クライアントの初期化時に、必須パラメータの 1 つ以上が指定されていない場合、または指定された値が無効な場合に発生します。返されたエラーメッセージで例外の詳細を確認できます。
TeaUnretryableException: この例外は、ネットワークの問題が原因で発生します。再試行回数が上限に達すると、TeaUnretryableException がスローされます。
getLastExceptionを使用して、例外発生時のリクエスト情報を取得できます。TeaError: この例外は、ビジネスエラーが原因で発生します。エラーのトラブルシューティングのために、次の 3 つのパラメータが提供されます。
code: 例外発生時に返されるエラーコード。
message: 例外発生時に返されるエラーメッセージ。メッセージには、例外がスローされた API リクエストの ID が含まれています。
data: 例外に対してサーバーから返される詳細なエラー情報。
重要
この例では、エラーメッセージは参照用にのみ出力されます。実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。適切な方法で例外を伝播する、ログを記録する、再試行を実行するなど、例外を処理するための合理的な対策を講じることをお勧めします。これにより、システムの堅牢性と安定性を確保できます。
<?php
require_once 'vendor/autoload.php';
use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeInstancesRequest;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
class ProxyDemo
{
public static function main()
{
try {
$config = new Config([
"accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
"accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
"endpoint" => "ecs.cn-beijing.aliyuncs.com", // <エンドポイント>
]);
$client = new Ecs($config);
$runtime = new RuntimeOptions([]);
$describeInstancesRequest = new DescribeInstancesRequest([
"regionId" => "cn-beijing"
]);
$resp = $client->describeInstancesWithOptions($describeInstancesRequest, $runtime);
var_dump($resp);
} catch (\Exception $error) {
if ($error instanceof TeaError) {
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージは参照用にのみ出力されます。
print_r("message:" . $error->getMessage() . "\n");
print_r("code:" . $error->getCode() . "\n");
print_r($error->data);
} elseif ($error instanceof TeaUnableRetryError) {
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージは参照用にのみ出力されます。
print_r($error->getLastException());
} else {
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージは参照用にのみ出力されます。
print_r("message:" . $error->getMessage());
}
}
}
}
ProxyDemo::main();