Découvrez les types d'exceptions levées par Alibaba Cloud SDK V2.0 for PHP ainsi que la manière de les intercepter et de les traiter.
Le SDK V2.0 for PHP lève trois types d'exceptions, chacun ayant une cause et une stratégie de réponse spécifiques :
InvalidArgumentException: un paramètre obligatoire est manquant ou possède une valeur non valide lors de l'initialisation du client SDK. Consultez les détails de l'exception dans le message d'erreur retourné.TeaUnretryableException: une erreur réseau persiste après épuisement des tentatives de nouvelle exécution. AppelezgetLastExceptionpour récupérer les informations de requête de la dernière tentative.-
TeaError: l'API retourne une erreur métier. Les propriétés suivantes facilitent le diagnostic :code: code d'erreur retourné par l'API.message: message d'erreur, incluant l'ID de requête de l'appel API ayant échoué.data: détails bruts de l'erreur retournés par le serveur.
L'exemple suivant intercepte la classe de base \Exception et utilise des vérifications instanceof pour identifier le type d'exception spécifique. Vérifiez d'abord TeaError et TeaUnableRetryError avant le traitement générique de secours afin d'appliquer la réponse appropriée à chaque type.
Cet exemple affiche des messages d'erreur uniquement à titre indicatif. En production, n'ignorez jamais silencieusement les exceptions. Journalisez-les, propagez-les vers une couche supérieure ou effectuez une nouvelle tentative avec backoff exponentiel, selon le type d'exception rencontré.
<?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();
Recommandations de traitement
Choisissez la réponse appropriée selon le type d'exception :
InvalidArgumentException: corrigez la valeur du paramètre avant toute nouvelle tentative. Cette erreur signale une faute de programmation ; une simple réexécution sans modification du code ne résoudra pas le problème.TeaUnableRetryError: patientez avant de réessayer. Appliquez un backoff exponentiel pour éviter de surcharger le serveur. AppelezgetLastException()pour journaliser la cause racine avant la prochaine tentative.TeaError: examinez les champscodeetmessagepour déterminer l'origine du problème. Les erreurs API telles que les échecs d'authentification ou l'absence de ressources nécessitent une action corrective préalable à toute nouvelle tentative.