Comment utiliser le client intégré de Laravel pour interagir avec des API externes

Publié: 2023-04-24

Laravel facilite les interactions API pour les développeurs Web débutants et expérimentés. Le client HTTP Larvel est construit au-dessus du client HTTP Guzzle de PHP pour offrir aux développeurs une expérience plus fluide lors des requêtes HTTP. Ses principales fonctionnalités incluent l'authentification, le routage et le mappage objet-relationnel (ORM) efficace.

Cet article explorera l'utilisation du client HTTP de Laravel pour faire des requêtes, déboguer des réponses, créer des intergiciels et des macros, et plus encore.

Le client HTTP Laravel fait le travail difficile pour vous pour les API

Guzzle est un simple client HTTP pour PHP. Il offre des fonctionnalités pour différentes demandes de formulaire, notamment GET , POST , PUT et DELETE , ainsi que des capacités de diffusion en continu et des demandes en plusieurs parties. Avec le client HTTP Guzzle, envoyer des requêtes synchrones et asynchrones au serveur est possible. De plus, il est également livré avec un middleware décent pour personnaliser le comportement du client.

Le client HTTP de Laravel est un wrapper construit sur Guzzle mais avec des fonctionnalités supplémentaires. Il inclut la prise en charge des nouvelles tentatives de requêtes ayant échoué et certaines fonctions d'assistance avec des données JSON. La plupart des fonctionnalités des clients HTTP Laravel sont similaires à Guzzle.

Tirez le meilleur parti du client intégré de Laravel pour les interactions API ! Nouveau sur les API ? Ce guide a ce qu'il vous faut Cliquez pour tweeter

Conditions préalables

Dans les sections suivantes, vous en apprendrez plus sur le client HTTP de Laravel. Pour suivre, il vous faudra :

  • Connaissance de base de Laravel, PHP et des API
  • PHP et Composer installés
  • Facteur

Comment faire des demandes

Pour comprendre comment utiliser un client HTTP pour faire une requête, vous pouvez tirer parti de nombreuses API hébergées, telles que ReqRes.

Commencez par importer le package HTTP inclus lors de la création de l'application. Dans le fichier App/Http/Controllers/UserController.php , ajoutez le code suivant, en commençant par l'instruction use au début du fichier et le code restant dans la fonction index.

 use Illuminate\Support\Facades\Http; return Http::get("https://reqres.in/api/users?page=2");

Remarque : Pour les cas d'utilisation complexes, vous pouvez également envoyer la demande avec des en-têtes à l'aide de la méthode withHeaders .

Dans le même fichier, créez une nouvelle méthode post en utilisant le code ci-dessous :

 function post() { $response = Http::withHeaders([ 'Content-Type' => 'application/json', ])->post('https://reqres.in/api/users', [ 'name' => 'morpheus', 'job' => 'leader', ]); return $response; }

Ajoutez ensuite une route pour cela dans le fichier routes/web.php :

 Route::get('post',[UserController::class,'post']);

Maintenant, Postman peut être utilisé pour tester cette route. Ouvrez Postman et ajoutez http://127.0.0.1:8000/post comme URL, avec le type de requête comme GET . Une fois que vous aurez cliqué sur envoyer , vous verrez la réponse suivante :

Faire des demandes à l'aide de Postman
Faire des demandes à l'aide de Postman

Demandes simultanées

Les requêtes parallèles améliorent considérablement les performances car vous pouvez récupérer plus de données au cours de la même période. Le client HTTP de Laravel permet d'effectuer des requêtes concurrentes en utilisant la méthode pool.

Dans App/Http/Controllers/UserController.php , ajoutez le code suivant :

 use Illuminate\Http\Client\Pool; function concurrent() { $responses = Http::pool(fn (Pool $pool) => [ $pool->get('https://reqres.in/api/users?page=2'), $pool->get('https://reqres.in/api/users/2'), $pool->get('https://reqres.in/api/users?page=2'), ]); return $responses[0]->ok() && $responses[1]->ok() && $responses[2]->ok(); }

Ensuite, ajoutez la route de support dans le fichier routes/web.php .

 Route::get('concurrent',[UserController::class,'concurrent']);

Le navigateur donne la réponse suivante lorsque la route est visitée :

Demandes simultanées
Demandes simultanées

Demander des macros

Les macros de requête sont utiles lors de l'interaction avec des chemins d'API courants.

Pour créer la macro, vous devez définir la macro dans la méthode de démarrage du fichier app/Http/Providers/AppServiceProvider.php en utilisant le code ci-dessous :

 use Illuminate\Support\Facades\Http; Http::macro('reqres', function () { return Http::baseUrl('https://reqres.in/api'); });

Remarque : Assurez-vous d'ajouter l'instruction use au début du fichier.

Ensuite, utilisez la macro à l'intérieur du UserController en ajoutant le code suivant :

 function macro() { $response = Http::reqres()->get('/users?page=2'); return $response; }

Comme vous pouvez le voir, étant donné que la macro est déjà en cours de création, vous n'avez pas besoin d'ajouter à nouveau l'URL complète.

Enfin, ajoutez une route dans le fichier routes/web.php en utilisant le code ci-dessous :

 Route::get('macro',[UserController::class,'macro']);
Demande de macro
Demande de macro

Comment décoder les réponses

Pour décoder une réponse et vous assurer qu'une demande d'API aboutit, vous utilisez la méthode status incluse dans le client. Cette méthode obtient le code d'état envoyé par le serveur et l'affiche.

Pour tester cela, remplacez le code de macro précédent par le code ci-dessous dans le fichier App/Http/Controllers/UserController.php :

 function macro() { $response = Http::reqres()->get('/users?page=2'); return $response->status(); }

Ici, le code d'état 200 signifie que la demande a réussi.

Réponse de décodage réussie
Réponse de décodage réussie

Comment tester les API JSON

Laravel dispose de plusieurs assistants pour tester les API JSON et leurs réponses. Les fonctions d'assistance incluent json , getJson , postJson , putJson , patchJson , deleteJson , etc.

Pour mieux comprendre les tests, créez un scénario de test pour la route de l'utilisateur GET . Lorsque vous démarrez l'application Laravel, l' exemple de test est déjà créé. Dans le fichier tests/Feature/ExampleTest.php , remplacez le code existant par ce qui suit :

 <?php namespace Tests\Feature; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; class ExampleTest extends TestCase { /** * A basic test example. * * @return void */ public function test_example() { $response = $this->getJson('/users'); $response->assertStatus(200); } }

Le code ajouté récupère les données JSON sur la route de l'utilisateur et vérifie si le code d'état est 200 ou non.

Une fois que vous avez ajouté le code de test, exécutez la commande suivante dans votre terminal pour exécuter les tests :

 ./vendor/bin/phpunit

Une fois les tests terminés, vous verrez qu'il a effectué deux tests, qui ont tous deux réussi.

Tester les API JSON
Tester les API JSON

De même, vous pouvez rechercher différents types de requêtes et utiliser d'autres méthodes d'assistance pour des tests plus sophistiqués.

Comment gérer les événements

Laravel propose trois événements à déclencher lors du traitement des requêtes HTTP.

  • RequestSending , qui précède l'envoi de la demande.
  • ResponseReceived , c'est-à-dire lorsqu'une réponse est reçue.
  • ConnectionFailed , c'est-à-dire lorsqu'aucune réponse n'est reçue.

Les trois événements incluent la propriété $request pour inspecter l'instance Illuminate\Http\Client\Request , et ResponseReceived a une $response property supplémentaire. Ceux-ci sont particulièrement utiles pour effectuer des actions après un événement. Par exemple, vous pouvez envoyer un e-mail après avoir obtenu une réponse positive.

Pour créer un événement et un écouteur, accédez au fichier app/Providers/EventServiceProvider.php et remplacez le tableau listen par le code suivant.

 protected $listen = [ Registered::class => [ SendEmailVerificationNotification::class, ], 'Illuminate\Http\Client\Events\ResponseReceived' => [ 'App\Listeners\LogResponseReceived', ], ];

Exécutez ensuite la commande suivante dans votre terminal :

 php artisan event:generate

La commande ci-dessus créera l'écouteur app/Listeners/LogResponseReceived.php . Remplacez le code de ce fichier par le code ci-dessous :

 <?php namespace App\Listeners; use Illuminate\Http\Client\Events\ResponseReceived; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Log; class LogResponseReceived { /** * Create the event listener. * * @return void */ public function __construct(Request $request, Response $response) { Log::channel('stderr')->info($response->status()); } /** * Handle the event. * * @param \Illuminate\Http\Client\Events\ResponseReceived $event * @return void */ public function handle(ResponseReceived $event) { } }

Le journal d'information du code d'état est imprimé dans le terminal.

Journaux du terminal indiquant le code d'état
Journaux du terminal indiquant le code d'état

Combinez la puissance de Laravel & Guzzle pour une expérience API transparente. Prêt à améliorer vos compétences en développement Web ? Commencez ici Cliquez pour tweeter

Résumé

Qu'un site Web ou une application Web soit créé par une organisation ou un développeur indépendant, les API sont la clé de leur succès. Cependant, leur utilisation peut être difficile.

De nombreux frameworks et bibliothèques promettent de simplifier ce processus, mais Laravel se distingue par son accent mis sur la simplicité et la facilité d'utilisation. Leur client intégré prend en charge les appels d'API simples, les appels d'API simultanés, les macros d'API, les méthodes d'assistance pour les API basées sur JSON, etc.