Requêtes HTTP asynchrone avec Symfony
Quand on développe une application Symfony qui communique avec plusieurs APIs, il peut être tentant d’envoyer des requêtes les unes après les autres. Pourtant, cette approche peut vite devenir un goulet d’étranglement.
Dans cet article, je vous montre comment tirer parti de cette fonctionnalité pour gagner en performance.
Le problème classique : les appels successifs
Prenons un exemple simple. Vous devez interroger 5 APIs pour récupérer des données et les fusionner. La plupart des développeurs écriraient instinctivement ce type de code :
$results = [];
foreach ($urls as $url) {
$response = $client->request('GET', $url);
$results[] = $response->toArray();
}
Ce code est correct, mais lent : chaque appel attend que le précédent soit terminé avant de démarrer.
La solution : stream()
pour des appels concurrents
Symfony propose une API plus puissante avec la méthode stream()
. Elle vous permet de lancer toutes les requêtes d’un coup, et de récupérer les réponses dès qu’elles sont disponibles, sans bloquer inutilement.
Voici comment faire :
$responses = [];
foreach ($urls as $url) {
$responses[] = $client->request('GET', $url);
}
// Lecture des réponses au fur et à mesure
foreach ($client->stream($responses) as $response => $chunk) {
if ($chunk->isLast()) {
$data = $response->toArray();
// Traitement des données
}
}
Ce code :
- envoie toutes les requêtes en parallèle
- traite chaque réponse dès qu’elle est complète
- réduit considérablement le temps total d’exécution
Les gains de performance
Le gain dépend de vos APIs cibles, mais dans beaucoup de cas, vous pouvez diviser par 2 à 10 le temps d’appel global, surtout si les APIs mettent 300 à 500 ms à répondre individuellement.
Quand utiliser cette méthode ?
Utilisez stream()
dès que vous avez :
- plusieurs appels indépendants à faire
- une logique métier simple de traitement de réponse
- des APIs tierces lentes ou nombreuses
En résumé
Symfony HttpClient vous permet d’écrire un code simple, lisible et asynchrone, sans ajouter de complexité technique inutile.
La méthode stream()
est un outil puissant à intégrer dans votre boîte à outils pour tout projet Symfony orienté API.
Aller plus loin
Pour explorer toutes les possibilités de HttpClient
et de stream()
, consultez la documentation officielle Symfony.
Et vous ?
Avez-vous déjà utilisé stream()
dans vos projets Symfony ?
Partagez vos retours ou astuces en me rejoignant sur LinkedIn — je serai ravi d’en discuter !