Conheça os tipos de exceção lançados pelo Alibaba Cloud SDK V2.0 for PHP e saiba como capturar e tratar cada um deles.
O SDK V2.0 for PHP lança três tipos de exceção, cada um com uma causa e uma estratégia de resposta diferentes:
InvalidArgumentException: Um parâmetro obrigatório está ausente ou possui um valor inválido durante a inicialização do cliente do SDK. Visualize os detalhes da exceção na mensagem de erro retornada.TeaUnretryableException: Um erro de rede persiste após o esgotamento de todas as tentativas de nova tentativa. ChamegetLastExceptionpara recuperar as informações da requisição da última tentativa.-
TeaError: A API retorna um erro de negócio. As propriedades a seguir ajudam a diagnosticar o erro:code: o código de erro retornado pela API.message: a mensagem de erro, incluindo o ID da requisição da chamada de API que falhou.data: detalhes brutos do erro retornados pelo servidor.
O exemplo a seguir captura a classe base \Exception e usa verificações com instanceof para identificar o tipo específico de exceção. Verifique TeaError e TeaUnableRetryError antes do fallback genérico para tratar cada tipo com a resposta adequada.
O exemplo imprime mensagens de erro apenas para referência. Em produção, não ignore exceções silenciosamente. Registre-as em log, propague-as para uma camada superior ou tente novamente com backoff exponencial, conforme apropriado para cada tipo de exceção.
<?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", // <endpoint>
]);
$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) {
// Handle exceptions with caution in your actual business scenario and do not ignore exceptions in your project. In this example, error messages are printed for reference only.
print_r("message:" . $error->getMessage() . "\n");
print_r("code:" . $error->getCode() . "\n");
print_r($error->data);
} elseif ($error instanceof TeaUnableRetryError) {
// Handle exceptions with caution in your actual business scenario and do not ignore exceptions in your project. In this example, error messages are printed for reference only.
print_r($error->getLastException());
} else {
// Handle exceptions with caution in your actual business scenario and do not ignore exceptions in your project. In this example, error messages are printed for reference only.
print_r("message:" . $error->getMessage());
}
}
}
}
ProxyDemo::main();
Orientações de resposta
Escolha a resposta apropriada com base no tipo de exceção:
**
InvalidArgumentException**: Corrija o valor do parâmetro antes de tentar novamente. Este erro indica um equívoco de programação — tentar novamente sem alterar o código não terá sucesso.**
TeaUnableRetryError**: Tente novamente após um atraso. Utilize backoff exponencial para evitar sobrecarregar o servidor. ChamegetLastException()para registrar a causa raiz antes de fazer uma nova tentativa.**
TeaError**: Verifiquecodeemessagepara determinar a causa. Erros de API, como falhas de autenticação ou recursos ausentes, exigem ações corretivas antes de uma nova tentativa.