DEV Community

Cover image for đŸŽ™ïžHttpChunk avec Flow
Mathieu Ledru
Mathieu Ledru

Posted on

đŸŽ™ïžHttpChunk avec Flow

Le traitement des réponses HTTP en chunks est un défi récurrent :

Plusieurs requĂȘtes doivent ĂȘtre lancĂ©es en parallĂšle.
Certaines échouent (404, timeouts) et nécessitent des retries.
Chaque utilisateur renvoie des donnĂ©es additionnelles (todos, posts), impliquant des requĂȘtes « fan-out ».
Le tout s’accumule rapidement en callback hell, gestion d’état manuelle, et tests difficiles.
Problématique :

HTTP chunk processing is complex when it should be fluid.

Le problĂšme
En PHP, la gestion de flux HTTP asynchrones a souvent été abordée de maniÚre impérative :

Callbacks imbriqués.
Variables d’état partagĂ©es.
Difficultés de test et de maintenance.
Ces approches rendent le code peu lisible, fragile et coûteux à faire évoluer.

La solution avec Flow
Le Flow Framework apporte une réponse fonctionnelle et élégante à cette complexité.

Jobs : des fonctions pures qui transforment des données.
Ips : des objets immuables qui transportent l’information entre les jobs.
Drivers : Amp, React, Swoole ou Fiber — abstraits derriùre Flow.
Y-Flow : l’intĂ©gration du Y-Combinator pour gĂ©rer la rĂ©cursion sans boucles explicites.
Résultat : un pipeline clair, composable et testable, qui orchestre naturellement les flux asynchrones.

La démo : httpchunkflow.php
L’exemple concret :

php examples/httpchunkflow.php
Déroulement :

Trois requĂȘtes initiales (/users, /users/404, /todos).
Gestion des erreurs : un 404 est automatiquement retry vers /users/1.
Y-Combinator : chaque utilisateur dĂ©clenche automatiquement des requĂȘtes supplĂ©mentaires (/todos, /posts).
ExĂ©cution concurrente : les requĂȘtes s’exĂ©cutent en parallĂšle.
Merge final : consolidation des données en un résultat structuré.
Extrait de logs :

. #1 GET /users ... started
*. #2 GET /users/404 ... started
*. #3 GET /todos ... started
.
#2 404 -> retry /users/1
..* #1 chunks: parsing via Y
...* #101 QUEUED /users/1/todos
...* #1101 QUEUED /users/1/posts
.* #101 200 in 18ms
.* #1101 200 in 16ms
....* merging data
.....* finalizing results
User #1: Leanne Graham (Sincere@april.biz)

  • Todos: 20 items
  • Posts: 10 items DONE driver=Flow\Driver\AmpDriver duration=7.99s users=200 retry=1 errors=0 Les bĂ©nĂ©fices ✅ LisibilitĂ© : plus de callback hell. ✅ PuretĂ© : chaque job est une fonction testable isolĂ©ment. ✅ ImmutabilitĂ© : flux de donnĂ©es clairs et prĂ©visibles. ✅ RĂ©cursion Ă©lĂ©gante : Y-Combinator au lieu de boucles impĂ©ratives. ✅ Async par design : Flow orchestre la concurrence naturellement. Conclusion Avec Flow et Y-Combinator, le traitement HTTP chunkĂ© passe d’un cauchemar impĂ©ratif Ă  une solution fluide et fonctionnelle. On obtient du code :

plus lisible,
plus testable,
plus maintenable.
Ressources
🔗 Flow Framework – GitHub
🔗 API de test – JSONPlaceholder

Top comments (0)