Skip to content
Gérits Aurélien edited this page Feb 19, 2026 · 1 revision

ApiTool est le connecteur réseau de haute performance de Magepattern 3. Contrairement aux approches classiques, il intègre un ordonnanceur de Fibers (Event Loop) permettant d'exécuter des tâches réseau asynchrones sans bloquer le thread principal.

Namespace : Magepattern\Component\Tool\ApiTool

Modes de Fonctionnement

La classe propose deux approches selon le besoin de votre application :

  1. Mode Synchrone (Standard) Utilisé pour des requêtes unitaires simples où l'attente est acceptable (ex: un paiement).

Méthodes : request(), get(), post().

Comportement : Bloquant.

  1. Mode Asynchrone (Fiber) Utilisé pour paralléliser des dizaines de requêtes sans augmenter le temps total d'exécution.

Méthodes : asyncRequest(), run().

Comportement : Non-bloquant (coopératif).

Utilisation de l'Asynchrone (Fibers)

L'utilisation se déroule en trois étapes : Déclaration, Ordonnancement, et Récupération.

Exemple complet : Synchronisation de Multi-fournisseurs

use Magepattern\Component\Tool\ApiTool;
use Magepattern\Component\Tool\ConsoleTool;

ConsoleTool::register('api:sync', function() {
    $endpoints = [
        'A' => 'https://api.provider-a.com/stock',
        'B' => 'https://api.provider-b.com/stock'
    ];

    $fibers = [];

    // 1. DÉCLARATION : On lance les Fibers
    foreach ($endpoints as $key => $url) {
        $fibers[$key] = new Fiber(function() use ($url, $key) {
            ConsoleTool::line("[$key] Connexion...");
            
            // La Fiber se suspend ici pendant que Curl travaille en arrière-plan
            $response = ApiTool::asyncRequest('GET', $url);
            
            return $response; // Valeur qui sera récupérée par getReturn()
        });
        
        $fibers[$key]->start();
    }

    // 2. ORDONNANCEMENT : On lance le moteur (Event Loop)
    // C'est cette ligne qui gère les pauses et les reprises des Fibers
    ApiTool::run();

    // 3. RÉCUPÉRATION : On traite les résultats terminés
    foreach ($fibers as $key => $f) {
        if ($f->isTerminated()) {
            $result = $f->getReturn();
            ConsoleTool::success("[$key] Reçu : " . $result['status']);
        }
    }
});

Détails Techniques : getReturn()

La méthode getReturn() est cruciale dans l'architecture Fiber :

Elle ne peut être appelée qu'après l'exécution de ApiTool::run().

Elle extrait la valeur retournée par le return à l'intérieur de la fonction anonyme de la Fiber.

Si vous l'appelez avant que la Fiber ne soit terminée (isTerminated()), PHP lèvera une FiberError.

Notes pour les Développeurs

Timeout : Par défaut, le timeout est de 10 secondes par requête.

JSON : L'outil détecte automatiquement les réponses JSON et les décode en tableaux PHP.

Logger : Toutes les erreurs de connexion ou codes HTTP d'erreur (4xx, 5xx) sont tracés dans Logger avec le détail de l'URL concernée.

Clone this wiki locally