Plus tôt cette semaine, lorsque je travaillais avec l'API Laravel Rest, j'ai rencontré un désagrément sous la forme d'une erreur de délai d'attente. Cela conduit à la frustration des utilisateurs finaux face aux problèmes de développement. Permettez-moi de résumer le scénario global :
J'avais besoin de charger des données à partir d'une source de données externe, de les filtrer, puis de les préparer pour un retour json. La quantité de données n’était pas importante, seulement environ 10 000 en une seule requête. Le principal problème est survenu lorsque j'ai essayé de les formater après les avoir récupérés et filtrés. J'ai donc commencé à déboguer en suivant l'étape suivante :
Vérifiez que la requête est optimisée et que les colonnes sont également indexées.
Assurez-vous d'utiliser la méthode des morceaux
Vérifiez que le référentiel de formatage n'utilise aucune méthode/référence/implémentation/fonctions inutilisées/appel d'API externe inutiles.
Toutes les vérifications sont effectuées, mais le message affiche toujours une erreur de délai d'expiration de la passerelle car elle dépasse plus d'une minute. La classe de service ressemble à ci-dessous :
La classe repo ressemble à ci-dessous :
À l’œil nu, cela ne devrait pas générer d’erreur de délai d’attente pour plus de 10 000 traitements et manipulations de données. Nous discuterons à la fin de la raison pour laquelle cela se produit (ce n'est peut-être pas une raison concrète mais probable) et discuterons maintenant de la façon dont je le résout à l'aide de Laravel Api Resource.
C'est simple à mettre en œuvre. Tout d’abord, générez la ressource Laravel Api à partir de la ligne de commande :
php artisan make:resource DataFormatterResource
Ensuite, envoyez votre objet modèle à la ressource et formatez/manipulez vos données selon les exigences indiquées ci-dessous :
Étonnamment, la réponse n'a pris que 3,7 secondes ?!
J'ai essayé de découvrir le vrai problème ici et j'ai trouvé quelques cas probables mentionnés en haut à définir à la fin. Les cas sont donnés :
Dans la plupart des services de mon projet, j'ai utilisé un référentiel ou un formateur fonctionnel au niveau de la couche de service, mais dans ce cas, j'ai eu une difficulté car il peut y avoir d'autres causes à ce problème.
Ce que je voulais souligner, c'est que les ressources Laravel peuvent s'avérer utiles dans certaines situations délicates lorsque l'on travaille avec des modèles.
Si vous aimez cet article, laissez un applaudissement ou un commentaire. = « Bon codage !…. » ?>
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!