Maison >développement back-end >tutoriel php >Comment accélérer la consommation d'API de votre application
Lors du développement d'une application PHP, vous pouvez rencontrer des situations où vous devez interagir avec des ressources ou des services distants. Pour étendre les fonctionnalités de votre application, vous pouvez utiliser divers services d'API pour obtenir des données distantes, vous connecter aux comptes d'utilisateurs d'autres sites Web ou convertir des ressources partagées par votre application. Le site Web ProgrammableWeb souligne qu'il existe actuellement plus de 10 000 API disponibles sur le Web, vous pouvez donc trouver de nombreux services pour étendre les fonctionnalités de votre application PHP. Cependant, une utilisation incorrecte de l'API peut rapidement provoquer des problèmes de performances et prolonger le temps d'exécution du script. Si vous souhaitez éviter cela, envisagez de mettre en œuvre certaines des solutions décrites dans cet article.
Les scripts PHP typiques exécutent des commandes dans le code séquentiellement. Cela semble logique, car vous voudrez peut-être obtenir les résultats d'une opération précédente (comme une requête de base de données ou une opération de variable) pour passer à l'étape suivante du script. Les mêmes règles s'appliquent lorsque vous passez un appel API. Vous devez envoyer une demande, en attendant une réponse de l'hôte distant avant de pouvoir effectuer n'importe quelle action sur les données reçues. Cependant, si votre application passe plusieurs appels d'API et que vous avez besoin de données de chaque source pour continuer l'exécution, vous n'avez pas à effectuer chaque demande séparément. N'oubliez pas que le serveur responsable de la gestion des appels d'API est prêt à traiter plusieurs requêtes à la fois. Tout ce que vous avez à faire est de créer un script qui exécute les appels d'API en parallèle, plutôt que l'un après l'autre. Heureusement, PHP fournit un ensemble de fonctions curl_multi
conçues pour ce faire.
L'utilisation de la fonction curl_multi
est similaire à l'utilisation de la bibliothèque Curl pour faire des demandes typiques en PHP. La seule différence est que vous devez préparer un ensemble de demandes à effectuer (pas seulement une), utiliser la fonction curl_init
et la transmettre à la fonction curl_multi_add_handle
. Ensuite, l'appel de la fonction curl_multi_exec
exécutera la demande simultanément, et curl_multi_getcontent
vous permettra d'obtenir les résultats de chaque appel API. Veuillez lire ici pour voir un exemple de code qui implémente la logique.
Si vous souhaitez utiliser la fonction curl_multi
dans votre application PHP, il y a des choses importantes à noter. Premièrement, le temps d'exécution de la fonction curl_multi_exec
sera tant que l'appel API le plus lent dans la demande définie à la fonction curl_multi_add_handle
. Par conséquent, il est logique d'utiliser curl_multi
lorsque le temps pris pour chaque appel API est à peu près le même. S'il y a une demande dans l'ensemble curl_multi
qui est beaucoup plus lent que les autres, votre script ne pourra pas continuer à exécuter jusqu'à ce que la demande la plus lente soit terminée.
Il est également important que vous ayez besoin de déterminer le nombre de demandes parallèles qui peuvent être exécutées en même temps. N'oubliez pas que si votre site Web gère beaucoup de trafic et que chaque utilisateur déclenche un appel API simultané à un serveur distant, le nombre total de demandes exécutées en même temps peut rapidement devenir élevée. Assurez-vous de vérifier les restrictions énoncées dans la documentation de l'API et découvrez comment le service réagira lorsque vous atteignez ces restrictions. Lorsque vous atteignez la limite, le serveur distant peut envoyer un code de réponse HTTP ou un message d'erreur spécifique. Votre application doit gérer correctement ces situations ou les mettre dans un journal afin que vous puissiez diagnostiquer le problème et réduire le nombre de demandes.
Si vous souhaitez garder votre application Web réactive et éviter de servir des pages à chargement lent, un grand nombre d'appels API vers des serveurs distants peut rendre cette tâche plus difficile. Si toutes les demandes sont faites dans le flux d'application principal, l'utilisateur final ne verra pas la page rendue avant que le script PHP reçoive la réponse de l'API et traite les données. Bien sûr, de nombreux services API sont hébergés sur des serveurs rapides et peuvent gérer rapidement les demandes. Cependant, votre application peut encore être parfois ralenti par les retards de connexion ou un facteur aléatoire affectant le processus de connexion ou le serveur distant lui-même.
Si vous souhaitez protéger l'utilisateur final de ces problèmes, vous devez séparer la partie de l'application responsable de la gestion de la demande du processus principal dans un script séparé. Cela signifie que l'appel API sera exécuté dans un thread séparé qui n'interfère pas avec la partie du code responsable de l'affichage du site.
Pour implémenter une telle solution, vous pouvez écrire un script PHP distinct et l'exécuter à l'aide de la fonction exec()
, comme n'importe quelle application de ligne de commande. Différents cadres PHP fournissent souvent des modules qui simplifient les scripts de ligne de commande d'écriture et vous permettent de les intégrer facilement dans les modèles ou composants d'applications existantes. Vérifiez simplement les composants de la console Symfony2 ou CakePHP pour voir quelques exemples. Diverses plates-formes PHP (pas seulement les frameworks) peuvent également fournir des outils qui facilitent la rédaction de scripts en ligne de commande, tels que WP CLI (l'interface de ligne de commande pour WordPress).
Si vous recherchez un moyen plus puissant de gérer les appels d'API dans un processus distinct, envisagez de configurer un serveur d'emploi, comme Gearman. Un serveur d'emploi est une solution complète qui effectue toutes les opérations requises pour séparer une tâche (travail) spécifique en un processus distinct. Lisez Alireza Rahmani Khalili à démarrer avec Gearman Article pour savoir comment cela fonctionne et comment le mettre en œuvre en PHP. Si vous travaillez sur la plate-forme Zend Server, vous pouvez utiliser le composant de file d'attente Zend Job, qui fournit des fonctionnalités similaires. Des exemples de ses fonctionnalités et de son utilisation sont décrits dans l'article "Planification avec la file d'attente de travaux" écrite par Alex Stetsenko.
Quelle que soit la solution que vous choisissez pour séparer les appels d'API, vous devez considérer comment différentes parties de votre application communiquent entre elles. Tout d'abord, vous devez placer les données que vous recevez de l'appel API où la partie entière de l'application est accessible (comme une table de base de données ou un fichier). Vous devez également partager l'état de l'exécution individuelle du script. L'application principale doit savoir si l'appel API exécuté en externe est en cours, s'il a été terminé il y a longtemps ou s'il a échoué. Si vous envisagez d'utiliser une solution de serveur d'emploi, il peut offrir la possibilité de surveiller l'état du travail. Cependant, si vous souhaitez simplement vous en tenir à l'écriture de scripts de ligne de commande PHP simples, vous devez implémenter ce type de logique vous-même.
plusieurs demandes HTTP ou plusieurs threads?
Alors, quelle solution est la meilleure - pour exécuter plusieurs demandes HTTP à la fois en utilisant la fonction curl_multi
, ou pour séparer les appels d'API du processus d'application principal? Cela dépend du contexte de l'interrogation du serveur distant. Vous pouvez constater que l'ensemble de l'appel API met beaucoup de temps à traiter les scripts, non seulement à cause de la demande. Il peut également y avoir une grande quantité de code responsable du traitement des données reçues, en particulier lors du traitement des fichiers transformés ou effectuant de grandes quantités d'écrits de base de données. Dans ce cas, l'utilisation de la fonction curl_multi
peut ne pas être suffisante pour accélérer l'application. L'exécution d'un thread séparé responsable de l'ensemble des données de fonctionnement et de traitement reçues de l'hôte distant peut entraîner de meilleurs résultats dans les performances de l'application. D'un autre côté, si vous avez besoin d'exécuter de nombreux appels d'API simples qui n'impliquent pas le traitement des données lourds de votre côté, vous en tenir à la fonction curl_multi
pourrait être suffisant pour faciliter votre application.
Bien sûr, il existe une troisième solution - mélangeant les deux méthodes ci-dessus. Vous pouvez donc exécuter un fil séparé responsable de la gestion des appels d'API, puis essayer de le faire s'exécuter plus rapidement en faisant plusieurs demandes à la fois. Cela peut être plus efficace que l'exécution d'un script séparé pour chaque demande. Cependant, cela peut également nécessiter une analyse plus approfondie de la façon dont le flux de scripts est conçu de sorte que différentes exécutions de scripts et différents appels d'API exécutés en même temps n'interfèrent pas les uns avec les autres et ne se répètent pas le travail de l'autre.
Une autre solution pour accélérer les applications qui s'appuient fortement sur l'utilisation de l'API consiste à créer un moteur de cache intelligent. Il empêche votre script de passer des appels inutiles, car le contenu situé sur différents serveurs n'a pas changé. Le cache correct peut également réduire la quantité de données transférées entre les serveurs dans un seul appel API.
Pour écrire un moteur de cache de travail et retourner des données valides, vous devez vous assurer que la réponse du serveur distant reste inchangée, vous n'avez donc pas besoin de l'obtenir à chaque fois. Cela peut varier selon le service API spécifique, mais l'idée globale est de trouver un ensemble de paramètres (ceux-ci sont passés dans la demande) qui donnent la même réponse sur une période de temps donnée. Par exemple, si vous obtenez le taux de change de la monnaie quotidien à partir d'un service distant, vous pouvez déterminer que le taux de change d'une monnaie donnée (il s'agit d'un paramètre) reste inchangé pendant une journée. Par conséquent, la clé de cache utilisée pour stocker les données reçues de cette API particulière doit contenir à la fois la devise et la date. Si votre application doit obtenir ce taux de change spécifique la prochaine fois, vous pouvez vous référer aux données enregistrées dans le cache (comme une base de données ou un fichier) et éviter les demandes HTTP.
Le scénario ci-dessus suppose que votre application assume toute la responsabilité de vérifier la situation où les données reçues par le service distant peuvent être mises en cache, vous devez donc implémenter la logique de mise en cache correcte vous-même. Cependant, il existe également des cas où le service API suit ses données partagées et renvoie des champs supplémentaires contenant des métadonnées liées à une ressource spécifique. Les métadonnées peuvent être constituées de valeurs telles que la dernière date modifiée, le numéro de révision ou la valeur de hachage calculée en fonction du contenu des ressources. L'utilisation de ce type de données peut être un excellent moyen d'améliorer les performances des applications PHP, en particulier lorsqu'elle traite de grandes quantités de données. Au lieu d'obtenir la ressource complète à chaque fois que vous vous connectez à l'API, il vous suffit de comparer l'horodatage ou la valeur de hachage à la dernière valeur reçue. S'ils sont égaux, cela signifie seulement que vous pouvez utiliser les données que vous avez récupérées plus tôt, car le contenu distant n'a pas changé. Ces solutions supposent que vous utilisez un moteur de cache dans votre application, mais vous n'avez pas à vous soucier de savoir si les données stockées dans le cache sont valides. Étant donné que vous comptez sur les métadonnées renvoyées par le service API, il vous suffit de comparer les valeurs de métadonnées fournies par le serveur distant.
L'utilisation de métadonnées de ressources distantes est particulièrement bénéfique lors de l'utilisation de l'API de service d'hébergement de fichiers. La gestion des dossiers et des fichiers distants signifie souvent le transfert de grandes quantités de données, ce qui peut entraîner des problèmes de performances. Pour donner un exemple de la façon d'éviter cela, permettez-moi de décrire la solution utilisée dans l'API Dropbox. Le service API Dropbox renvoie des données spécifiques appliquées pour vérifier si le fichier distant a été modifié. Premièrement, la méthode des métadonnées (renvoie des informations sur le dossier et le fichier, telles que son nom, sa taille ou son chemin) contient un champ de hachage représentant la valeur de hachage de la ressource retournée. Si vous fournissez une valeur de hachage à partir d'une demande précédente en tant que paramètre dans une nouvelle demande et que les données distantes n'ont pas changé entre les demandes, l'API ne renverra qu'une réponse HTTP 304 (non modifiée). L'API Drobox fournit également une méthode delta spécifiquement utilisée pour éclairer les modifications d'un dossier ou d'un fichier spécifique. La valeur de hachage et la méthode Delta sont recommandées dans la documentation de l'API car elle peut considérablement améliorer les performances de votre application.
Cela peut sembler évident, mais dans certains cas, une lecture minutieuse de la documentation de l'API peut vous donner des solutions spécifiques sur la façon de passer des appels API plus efficacement. L'utilisation de l'API Dropbox décrite ci-dessus est un exemple très clair. Cependant, il peut y avoir d'autres moyens de réduire la quantité de données transmises dans la réponse (par exemple, sélectionnez quelques champs spécifiques renvoyés par l'API au lieu de recevoir l'ensemble de données). Vous pouvez également vérifier si les actions que vous avez effectuées dans une demande distincte peuvent être effectuées immédiatement. Par exemple, la méthode de traduction de l'API Google Translate (utilisée pour obtenir des traductions de texte dans différentes langues) peut renvoyer plusieurs traductions en une seule demande. En passant quelques chaînes de texte à traiter en un seul appel API, vous pouvez éviter de faire plusieurs demandes, ce qui peut économiser un temps d'exécution d'application.
Comme vous pouvez le voir, il existe de nombreuses façons d'améliorer les performances des applications PHP qui comptent fortement sur l'utilisation d'API distantes. Vous pouvez effectuer plusieurs demandes à la fois, soit en utilisant la fonction curl_multi
, soit exécuter un thread d'application séparé. Une autre solution consiste à mettre en œuvre un moteur de mise en cache qui vous empêche de passer des appels API inutiles ou réduit la quantité de données transférées entre les serveurs. Enfin, l'approche fournie par les services API peut vous fournir certaines solutions prêtes à l'emploi pour améliorer les performances, telles que l'exécution de plusieurs opérations en une seule demande.
J'espère que ce message vous fournira un aperçu de la façon de gérer efficacement les demandes d'API. Si vous avez des commentaires sur les points clés soulevés dans l'article ou d'autres conseils sur la façon d'accélérer l'utilisation de l'API, n'hésitez pas à les publier ci-dessous. Vous pouvez également me contacter directement via Google Plus.
est affectée par une variété de facteurs. Tout d'abord, la vitesse de traitement du serveur, qui détermine la vitesse à laquelle le serveur traite et renvoie les réponses. La latence du réseau (c'est-à-dire le temps nécessaire aux données pour revenir du client vers le serveur) joue également un rôle important. D'autres facteurs incluent l'efficacité du code API, la charge sur le serveur et le nombre d'utilisation de l'API Selon le format. L'optimisation de ces facteurs peut améliorer considérablement les performances de l'API.
Il existe plusieurs stratégies pour optimiser votre API pour de meilleures performances. Tout d'abord, vous pouvez utiliser des pratiques de codage efficaces pour réduire le temps de traitement sur le serveur. Deuxièmement, vous pouvez utiliser un réseau de livraison de contenu (CDN) pour réduire la latence du réseau. Troisièmement, vous pouvez utiliser des caches pour stocker des données fréquemment consultées et réduire la charge sur le serveur. Enfin, vous pouvez utiliser la compression des données pour réduire la taille des données transmises, réduisant ainsi le temps nécessaire pour envoyer et recevoir des données.
Utilisation d'API signifie utilisant des API fournies par des tiers dans votre application. Cela comprend l'envoi de demandes à l'API et le traitement des réponses. L'API fournit un ensemble de fonctions que votre application peut utiliser pour interagir avec un système ou un service représenté par l'API.
Il existe plusieurs façons d'accélérer l'utilisation de l'API de l'application. Tout d'abord, vous pouvez utiliser des appels asynchrones pour empêcher le blocage du fil principal. Deuxièmement, vous pouvez utiliser la pagination pour limiter la quantité de données renvoyées par l'API. Troisièmement, vous pouvez utiliser le cache pour stocker des données fréquemment consultées et réduire le nombre de demandes à l'API. Enfin, vous pouvez utiliser la compression des données pour réduire la taille des données transmises, réduisant ainsi le temps nécessaire pour envoyer et recevoir des données.
Le réseau de distribution de contenu (CDN) joue un rôle crucial dans l'amélioration des performances de l'API. Il réduit la latence du réseau en distribuant du contenu à plusieurs serveurs situés dans différents emplacements géographiques. Lorsqu'un client envoie une demande, le CDN le dirige vers le serveur le plus proche, réduisant le temps nécessaire aux données pour revenir du client vers le serveur.
Le cache améliore les performances de l'API en stockant des données fréquemment accessibles dans le cache. Lorsque le client envoie une demande de données, le serveur vérifie d'abord le cache. Si les données sont en cache, le serveur les renvoie immédiatement, réduisant le temps de traitement et chargez sur le serveur. Si les données ne sont pas dans le cache, le serveur les récupère à partir de la base de données, le traite et le stocke dans le cache pour les demandes futures.
La compression des données améliore les performances de l'API en réduisant la taille des données transmise. Cela réduit le temps nécessaire pour envoyer et recevoir des données, augmentant ainsi la vitesse de l'API. La compression des données est particulièrement avantageuse lors du traitement de grandes quantités de données.
Les meilleures pratiques d'utilisation des API incluent l'utilisation d'appels asynchrones pour éviter le blocage du thread principal, en utilisant la pagination pour limiter la quantité de données renvoyées par l'API, en utilisant le cache pour stocker les données fréquemment accessibles et l'utilisation de la compression des données pour réduire la taille des données transmise .
Vous pouvez utiliser diverses mesures pour mesurer les performances de votre API, telles que le temps de réponse, le taux d'erreur et le débit. Le temps de réponse est le temps nécessaire à l'API pour retourner une réponse. Le taux d'erreur est le pourcentage de demandes qui entraînent une erreur. Le débit est le nombre de demandes que l'API peut traiter par unité de temps. Ces mesures peuvent être mesurées à l'aide d'outils de surveillance de l'API.
Les performances de l'API ont un impact significatif sur l'expérience utilisateur. Si l'API est lente, elle entraînera des temps de chargement lents, ce qui peut frustrer les utilisateurs et les faire abandonner l'application. D'un autre côté, une API rapide et réactive peut fournir une expérience utilisateur fluide et agréable. Par conséquent, l'optimisation des performances de l'API est cruciale pour améliorer l'expérience utilisateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!