Le WordPress d'aujourd'hui, décodé pour les développeurs

E-commerce

Ce que l’API HTTP de WordPress change lors d’un appel à une API de tarification transporteur

wp_remote_post impose des délais d'attente par défaut qui ne conviennent pas toujours à un calcul de frais de port en temps réel. Voici comment les ajuster proprement sans casser le tunnel de commande.

Par WordPress Développement • 12 juin 2021 • 4 min de lecture • Aucun commentaire
Ce que l'API HTTP de WordPress change lors d'un appel à une API de tarification transporteur

D’après le Codex de la fonction wp_remote_post(), le délai d’attente par défaut d’une requête HTTP sortante déclenchée par WordPress est de cinq secondes. Pour une méthode d’expédition personnalisée qui interroge en temps réel l’API d’un transporteur afin de calculer un tarif exact au moment de la validation du panier, ce chiffre a des conséquences directes sur l’expérience du tunnel de commande : au-delà de cette durée, la requête est interrompue et l’extension doit prévoir un comportement de repli.

Ce billet explique comment fonctionne l’API HTTP de WordPress dans ce contexte, comment ajuster ses délais d’attente correctement, sans entrer dans le choix du transporteur lui-même.

L’API HTTP de WordPress, une couche d’abstraction unique

Plutôt que d’utiliser directement les fonctions cURL de PHP, WordPress fournit une couche d’abstraction commune, wp_remote_get() et wp_remote_post(), qui choisit automatiquement le transport disponible sur le serveur (cURL en priorité, sinon les flux natifs de PHP) et applique un jeu d’arguments par défaut cohérent sur toute l’installation.

Ajuster le délai d’attente pour un appel spécifique

L'essentiel à retenir : wp_remote_post applique un délai d'attente par défaut de cinq secondes ; Ce délai s'ajuste par requête via l'argument timeout, jamais globalement à la légère ; Une API transporteur lente doit dégrader gracieusement plutôt que bloquer le tunnel

Le délai d’attente se règle via l’argument timeout, passé en secondes dans le tableau d’arguments de la requête. Il ne doit jamais être modifié globalement pour l’ensemble du site, ce qui ralentirait toute autre requête sortante, mais ciblé précisément sur l’appel à l’API du transporteur :

$reponse = wp_remote_post( 'https://api-transporteur.exemple/tarifs', [
    'timeout' => 8,
    'body'    => wp_json_encode( [
        'poids'         => $poids_colis,
        'code_postal'   => $code_postal_destination,
    ] ),
    'headers' => [ 'Content-Type' => 'application/json' ],
] );

if ( is_wp_error( $reponse ) ) {
    // repli sur un tarif fixe préconfiguré
}

Le retour de wp_remote_post() est soit un tableau de réponse, soit un objet WP_Error en cas d’échec, y compris en cas de dépassement du délai d’attente. Tester systématiquement is_wp_error() avant de lire le corps de la réponse évite une notice PHP sur une valeur absente.

Pourquoi allonger le délai n’est pas toujours la bonne réponse

Augmenter le timeout à trente secondes pour « laisser le temps » à une API transporteur lente déplace le problème plutôt que de le résoudre : un client qui valide son panier reste bloqué sur une page de chargement pendant tout ce délai si l’API transporteur ne répond pas. Le bon réflexe consiste à fixer un délai raisonnable, entre cinq et dix secondes, et à prévoir un tarif de repli préconfiguré si l’appel échoue, plutôt que de faire attendre le client indéfiniment.

Mettre en cache les tarifs obtenus

  • Mettre en cache la réponse de l’API transporteur pour un couple poids/destination donné, via l’API Transients de WordPress
  • Fixer une durée de cache cohérente avec la fréquence de mise à jour réelle des tarifs du transporteur
  • Invalider ce cache manuellement en cas de changement connu de grille tarifaire
$cle_cache = 'tarif_transp_' . md5( $poids_colis . $code_postal_destination );
$tarif     = get_transient( $cle_cache );

if ( false === $tarif ) {
    $tarif = appeler_api_transporteur( $poids_colis, $code_postal_destination );
    set_transient( $cle_cache, $tarif, HOUR_IN_SECONDS );
}

Ce que dit la documentation officielle sur les arguments par défaut

La page de référence de wp_remote_post() sur developer.wordpress.org liste l’ensemble des arguments disponibles : timeout, redirection, httpversion, blocking. L’argument blocking à false mérite une attention particulière, car il déclenche la requête sans attendre la réponse, ce qui n’a aucun sens pour un calcul de frais de port qui doit être affiché immédiatement au client.

En résumé

Un calcul de frais de port en temps réel dépend d’un service externe dont la latence échappe totalement au contrôle du site. Ajuster précisément le délai d’attente de wp_remote_post(), combiné à un mécanisme de repli et à une mise en cache raisonnable, évite qu’une lenteur ponctuelle du transporteur ne bloque tout le tunnel de commande.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi