Pourquoi vous devriez utiliser la librairie HTTPlug dans vos projets

Cet article a été publié depuis plus de 6 mois, cela signifie que le contenu peut ne plus être d'actualité.

HTTPlug est une librairie d’abstraction de client HTTP. HTTPlug vous permet de découpler le code de votre application d’une implémentation spécifique d’un client HTTP. Lorsque tous les composants de votre application dépendent uniquement de la librairie, vous avez alors la possibilité de choisir le client HTTP qui correspond le mieux à votre projet ou d’utiliser le même client que vos dépendances.

La bibliothèque est compatible avec la PSR-7 et définit un contrat pour l’envoi de requête HTTP. Elle permet également l’utilisation d’un client HTTP asynchrone. L’intérêt majeur du composant et que HTTPlug est complètement indépendant de toute implémentation cliente. C’est-à-dire, que lorsque vous utilisez HTTPlug, vous allez avoir la possibilité, sans changer quoi que ce soit à votre code, d’effectuer les requêtes HTTP via CURL, Guzzle, ReactPHP ou n’importe quel client de votre choix.

Mais en quoi est-ce intéressant pour votre projet ?

Si vous développez une librairie, comme par exemple un client d’API, vous ne savez pas à l’avance les dépendances qui seront utilisées dans les projets où votre composant va être intégré. Il peut s’agir d’un projet écrit en pur PHP, comme un projet Symfony, Laravel, Zend ou n’importe quel autre framework. Mais au-delà du framework, le projet utilisateur peut très bien utiliser un client CURL pour effectuer les appels réseaux afin d’éviter une contrainte technique pouvant être liée à Guzzle. Comment vous assurez que votre bibliothèque puisse s’adapter sans contrainte particulière au plus grand nombre de projets ? HTTPlug permet justement de répondre à cette problématique. Ne forcez pas vos utilisateurs à mettre en place une implémentation d’un outil qu’ils ne souhaitent pas !

A ce stade, vous voyez peut-être l’intérêt de mettre en place HTTPlug pour le développement de composant indépendant. Mais qu’en est-il de son utilisation au sein d’un code applicatif ?

Il est vrai que dans une application, nous changeons rarement l’implémentation de la couche effectuant les appels réseau. Pourtant HTTPlug peut une fois encore se révéler utile. En effet, la bibliothèque vous permettra de normaliser et découpler la manière dont vous effectuer vos requêtes HTTP. Tout comme pour l’écriture d’une librairie, vous serez alors libre de choisir l’implémentation de votre choix. Vous souhaitez démarrer avec CURL, pas de problème, vous pourrez passer du Guzzle en remplaçant tout simplement le package php-http/curl-client par php-http/guzzle6-adapter.

Vous n’êtes pas convaincu par ce dernier argument ? Il est vrai que l’on ne change pas d’implémentation tous les jours. Mais vous souvenez-vous du passage de la version 4 de Guzzle à la version 5 ? Ou de la 5 vers la 6, quand l’API du client avait totalement changée ? Car qu’on le veuille ou non, il est parfois indispensable de faire cette mise à jour pour profiter des dernières fonctionnalités des composants ou tout simplement pour continuer à utiliser une version maintenant du composant tier. Si vous aviez utilisé HTTPlug, cette mise à jour aurait été complètement transparente.

En utilisant une abstraction d’un client HTTP, vous êtes donc libre. Libre de choisir l’implémentation que vous souhaitez utiliser, libre de changer le client HTTP pour prendre celui qui correspond réellement à votre besoin. HTTPlug est un composant dans l’air du temps, lorsque l’on parle DDD ou architecture hexagonale, lorsque l’on souhaite avoir un code proche du métier et découpler des frameworks que l’on utilise, c’est exactement la philosophie que suis ce composant.

Qu’attendez-vous pour le mettre en place dans vos projets ? L’essayer, c’est l’adopter !