Guide de demande http asynchrone WordPress
Une chose facile avec php est qu’il est en série: chaque ligne de code fonctionne séquentiellement. Il s’agit également d’une restriction lorsque vous devez créer un programme qui interagit avec plusieurs API ou d’autres services, car les requêtes http prennent du temps et peuvent bloquer le rendu de page. J’ai discuté de ce problème dans mon article sur l’utilisation de PHP pour combiner des données à partir de plusieurs paramètres de l’API rest. Mon meilleur Conseil est d’utiliser le cache ou Javascript pour éviter ce problème. Un avantage de JavaScript est qu’il existe de nombreuses façons simples de générer des requêtes http asynchrones, comme l’API Easy de jquery ajax.
Bien que PHP puisse être en série, il existe plusieurs façons d’exécuter des requêtes http asynchrones dans une application PHP. J’ai déjà écrit des tâches asynchrones dans WordPress. C’est bon pour les cas d’utilisation où il est correct d’exécuter une tâche après la session en cours. Delicious Brains a un excellent article sur d’autres approches des méthodes PHP asynchrones dans WordPress. Cependant, si vous avez besoin des résultats de plusieurs requêtes http avant de terminer la session en cours, ces politiques ne fonctionneront pas. Au lieu de cela, il est préférable d’envoyer plusieurs requêtes http en même temps, puis de continuer. Dans cet article, je vais examiner comment cela peut être réalisé avec wordpress et fournir quelques ressources pour une utilisation plus poussée de PHP asynchrone.
Dans WordPress 4.5 ou plus tard, les requêtes des bibliothèques PHP sont utilisées pour les requêtes http. Ceci est très transparent, mais lorsque vous utilisez des fonctions telles que Wp _ Remote get () ou WP Remote Post (), la requête est faite par défaut en utilisant la requête. Par conséquent, nous pouvons utiliser les requêtes individuellement et en toute sécurité dans WordPress. C’est une bibliothèque utile et simple gérée par Ryan McCue. La classe principale requests a une méthode statique pour chaque méthode http.
Par conséquent, nous pouvons utiliser requests:: get () pour les requêtes get et requests:: Post () pour les requêtes post. Voici deux exemples simples. La première à obtenir une page de post d’un site distant via l’api WordPress rest. Un deuxième utilisateur envoie une demande post pour créer un post sur un site distant via l’api WordPress rest:
Nouvelle demande _ Auth Basic ([‘admin’, mot de passe ‘])
],
[2]
\
\
[1]
); C’est bien, mais on ne peut rien faire pour des fonctions comme WP _ Remote u * (). En fait, il est préférable de respecter ces normes. Mais cet article se concentre sur les demandes asynchrones.
Je ne l’ai pas encore vu largement utilisé, mais WordPress est capable d’exécuter des requêtes PHP asynchrones sans avoir besoin de dépendances supplémentaires de la version 4.5. La classe requests a une méthode request _ multiple (). Par exemple, pour utiliser l’exemple que j’ai commencé, en combinant les messages de l’API rest de plusieurs sites, nous pouvons combiner deux requêtes get comme ceci: ‘ https:\/\/calderaforms.com\/wp-json\/wp\/v2\/posts «,
« type» = > « obtenir»
G);
$request _ 2 =
‘URL’ = > https:\/\/joshpress.net\/wp-json\/wp\/v2\/posts «,
« type» = > « obtenir»
G);
$Response = Request:: Request _ multiple ([$request 1, $Request 2]);
Var requests _ Response $Response
Foreach ($reply to $Reply) {
$Data = [];
Si (IS _ A ($Response, ‘requests Response’)
$data [] = json \ u decode ($Response – > body);
}
} comme vous pouvez le voir, nous avons passé de nombreux paramètres de requête, URLs et méthodes pour chaque requête. Les deux demandes sont faites en même temps et, une fois remplies, nous pouvons traiter la réponse en dollars. Rappelez – vous que si vous dites \
C’est simple, non? Il y a beaucoup de complexité cachée
L’intérieur de la demande. Volontiers. C’est une bonne chose d’éliminer la complexité. Nous pouvons également faire une demande post. Cela peut être utile si vous devez ajouter des données d’un formulaire à plusieurs services (base de données, CRM, fournisseur de listes de diffusion, etc.). Voici un exemple où la même personne est inscrite sur deux listes de chimpanzés: ‘ [protégé par courriel] »
« État» = > « membres»
G);
$request _ 1 =
‘URL’ = > https:\/\/us10.api.mailchimp.com\/3.0\/lists\/42\/members «,
« type» = > « publication»,
« titre» = > $titre,
« données» = > $abonnés
G);
$request _ 2 =
‘URL’ = > https:\/\/us10.api.mailchimp.com\/3.0\/lists\/4000000\/members «,
« type» = > « publication»,
« titre» = > $titre,
« données» = > $abonnés
G);
$Response = Request:: Request _ multiple ([$request 1, $Request 2]);
Var requests _ Response $Response
Foreach ($reply to $Reply) {
$Data = [];
Si (IS _ A ($Response, ‘requests Response’)
$data [] = json \ u decode ($Response – > body);
}
Y a – t – il d’autres options? Requests est compatible avec php 5.2 et intégré dans WordPress. Il s’agit donc de l’option la plus appropriée et il est peu probable qu’elle déclenche un conflit. Guzzle prend également en charge les requêtes http asynchrones. Si vous avez des besoins plus complexes, guzzle est un bon choix. Cet article s’inspire en fait d’un problème récent que j’ai rencontré en attendant de nombreuses requêtes http série. J’ai corrigé le problème avec les requêtes asynchrones de guzzle, mais j’ai ensuite commencé à chercher « WordPress way».
Si vous voulez approfondir le PHP asynchrone, la Bibliothèque reactphp (qui n’a rien à voir avec reactjs) peut gérer le http asynchrone, etc. Facebook PHP Fork Hack est construit à partir de PHP asynchrone. Au fur et à mesure que la complexité de l’application augmente et que vous Intégrez des tiers ou vos propres API dans votre application, il devient plus difficile de bloquer les requêtes http. J’espère que cet article sur WordPress asynchrone http sera utile.