Avec la panne de Twitter aujourd'hui, j'ai réfléchi à la meilleure façon de gérer les appels à une API lorsqu'elle est en panne. Si j'utilise CURL pour appeler leur API, comment faire en sorte que le script échoue rapidement et gère les erreurs afin de ne pas ralentir l'application ?
Réponses
Trop de publicités?Utilisez curl_setopt
curl_setopt($yourCurlHandle, CURLOPT_CONNECTTIMEOUT, '1'); // 1 second
Si vous utilisez curl >= 7.16.2 et PHP >= 5.2.3 il y a CURLOPT_CONNECTTIMEOUT_MS
Utilisez curl_getinfo pour obtenir le code de réponse cURL ou la longueur du contenu et les vérifier.
$HttpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
Peut-être utiliser une sorte de cache pour savoir si twitter est actif ou passif. Enregistrez les réponses invalides de l'api dans une base de données ou un fichier côté serveur. Une fois que vous obtenez deux/trois/une autre quantité de réponses invalides à la suite, désactivez toutes les demandes à l'api pendant x temps.
Après un certain temps, tentez une requête, s'il est toujours hors service, désactivez-le à nouveau pendant x minutes.
Si votre serveur peut exécuter des tâches CRON, pensez à faire un script qui vérifie l'api pour une réponse valide toutes les quelques minutes. S'il découvre qu'elle est en panne, il désactive les demandes jusqu'à ce qu'elle soit rétablie. Au moins dans ce cas, le serveur ferait les tests et les utilisateurs n'auront pas à être les cobayes.