Sommaire
FetchPHP est une bibliothèque HTTP pour PHP construite sur Guzzle, conçue pour imiter le comportement de l’API fetch de JavaScript. Elle se distingue par ses capacités asynchrones grâce à l’utilisation des Fibers de PHP et du package Matrix, permettant aux développeurs de travailler avec une syntaxe async/await, familière aux utilisateurs de JavaScript.
FetchPHP propose également une API fluide, inspirée du client HTTP de Laravel, qui rend la construction des requêtes flexible et lisible. Que vous travailliez sur des petites API ou des systèmes à grande échelle nécessitant une forte concurrence, FetchPHP offre une solution puissante et efficace pour la gestion des requêtes HTTP en PHP.
Pour plus d’informations sur l’intégration des Fibers dans FetchPHP, consultez Matrix, le package qui alimente cette fonctionnalité.
Pourquoi choisir FetchPHP plutôt que Guzzle ?
Bien que Guzzle soit un client HTTP largement utilisé et reconnu, FetchPHP va plus loin en introduisant une gestion des tâches asynchrones avec les Fibers de PHP. Voici quelques avantages de FetchPHP :
- Véritable gestion asynchrone avec les Fibers : Contrairement à Guzzle qui utilise les Promises pour la gestion asynchrone, FetchPHP s’appuie sur les Fibers, introduits dans PHP 8.1, pour une vraie gestion non bloquante des tâches. Cela permet une gestion fine du cycle de vie des tâches (pause, reprise, annulation, etc.).
- Syntaxe async/await : FetchPHP introduit une syntaxe async/await similaire à celle de JavaScript, rendant le code PHP asynchrone plus lisible et intuitif.
- API fluide et enchaînable : L’API fluide de FetchPHP rend la création et la gestion des requêtes HTTP plus flexible et lisible que l’approche basée sur les Promises de Guzzle.
- Gestion avancée des erreurs : FetchPHP permet une gestion des erreurs personnalisable avec la possibilité de définir des gestionnaires d’erreurs spécifiques et des mécanismes de reprise.
Différences dans la gestion des tâches asynchrones
FetchPHP et Guzzle diffèrent principalement dans leur gestion des tâches asynchrones. Voici un aperçu des principales différences :
- Concurrence basée sur les Fibers : FetchPHP utilise les Fibers pour exécuter les tâches de manière asynchrone, permettant une meilleure gestion des tâches longues ou concurrentes par rapport aux Promises de Guzzle.
- Contrôle du cycle de vie des tâches : FetchPHP permet de démarrer, mettre en pause, reprendre ou annuler des tâches, ainsi que de suivre leur statut. Ce niveau de contrôle n’est pas offert par Guzzle.
- Gestion personnalisée des erreurs : Avec FetchPHP, il est possible de personnaliser la gestion des erreurs et de définir des stratégies de reprise des tâches en cas d’échec.
Exemples d’utilisation de FetchPHP
Requête asynchrone avec gestion du cycle de vie
use Fetch\\Interfaces\\Response as ResponseInterface;
// Envoi asynchrone d'une requête POST
async(fn () => fetch('<https://example.com>', [
'method' => 'POST',
'headers' => ['Content-Type' => 'application/json'],
'body' => json_encode(['key' => 'value']),
]))
->then(fn (ResponseInterface $response) => $data = $response->json()) // Gestion de la réussite
->catch(fn (\\Throwable $e) => echo "Erreur : " . $e->getMessage()); // Gestion des erreurs
Contrôle manuel d’une tâche asynchrone
use Matrix\\Task;
use Matrix\\Enum\\TaskStatus;
$task = new Task(function () {
return "Tâche terminée !";
});
$task->start(); // Démarrage de la tâche
$task->pause(); // Pause de la tâche
$task->resume(); // Reprise de la tâche
$task->cancel(); // Annulation de la tâche
// Réessayer en cas d’échec
if ($task->getStatus() === TaskStatus::FAILED) {
$task->retry();
}
$result = $task->getResult();
Installation
FetchPHP nécessite PHP 8.1 ou supérieur en raison de l’utilisation des Fibers. Pour l’installer, utilisez la commande suivante :
composer require jerome/fetch-php
Conclusion
FetchPHP est une solution puissante pour la gestion des requêtes HTTP en PHP, offrant une approche moderne avec les Fibers et une API fluide. Il est idéal pour les développeurs cherchant une véritable gestion asynchrone avec une syntaxe familière pour ceux qui utilisent JavaScript.
Merci de votre lecture 😎
Ecrit par
Alyson Paya
Recevez par mail toute l’actualité de Mink
En cliquant sur "Ok", vous acceptez les CGU ainsi que notre politique de confidentialité décrivant la finalité des traitements de vos données personnelles.