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.
Heureusement, le composant HttpClient
de Symfony permet de gérer plusieurs requêtes en parallèle, de manière simple et efficace — sans thread, ni promesse, ni worker.
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 à 500ms à 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.
Et vous, utilisez-vous stream()
dans vos projets ? Avez-vous d’autres astuces pour paralléliser vos appels API ? Venez en discuter avec moi sur LinkedIn.