Développement API-first

2021-12-08 | Benoît Petitcollot

image article

Développement API-first

Depuis plusieurs années, nous développons nos principaux projets avec une approche API-first. Voici quelques éléments pour comprendre ce qui nous a conduit à adopter cette démarche et pourquoi nous en sommes assez satisfaits.

Développement de sites web

Pendant longtemps, le langage PHP a été notre outil central de développement.

  • C'est lui qui est chargé de recevoir les requêtes des utilisateurs et d'effectuer les calculs et traitements nécessaires.
  • Il communique avec la base de données et le système de fichiers pour stocker les données du site.
  • Il gère la sécurité des données en mettant en oeuvre les stratégies d'authentification des utilisateurs
  • Il construit les pages HTML prêtes à être affichées dans le navigateur.

Le langage javascript est utilisé avec parcimonie pour améliorer l'ergonomie des pages.

Evolutions des technologies

Au cours du temps, deux mouvements ont animé notre écosystème :

Renforcement de PHP

PHP a longtemps été considéré comme un langage souffrant de défauts majeurs : trop permissif et peu performant. Mais des évolutions vont venir corriger (ou compenser) ces défauts.

  • Le framework Symfony a structuré une importante communauté autour de composants logiciels structurés et de bonnes pratiques. La permissivité du langage est donc encadrée à défaut d'être corrigée.
  • La version 7 du langage a permis de gagner significativement en rapidité d'exécution, résolvant les problèmes de performance. Elle généralise dans le même temps les possibilités de typage, offrant ainsi des fonctionnalités dans la lignée des bonnes pratiques existantes.

Montée en puissance de javascript

Dans un premier temps, javascript n'était utilisé que pour ajouter un peu d'interactivité aux éléments des pages web. Le langage souffre lui aussi de lenteur d'exécution et le code est difficile à organiser et à maintenir. Il est donc cantonné à une utilisation ponctuelle.

Mais javascript s'est ensuite imposé plus largement : on a commencé à l'utiliser pour recharger une partie de la page (ajax), ce qui a apporté de gros gains en fluidité des interfaces. Par ailleurs, les autres langages utilisables dans le navigateurs ont fini par disparaître, laissant un monopole à javascript. Un nouveau moteur d'exécution a réglé les problèmes de performances et les pages web sont devenues de véritables applications faisant un usage intensif du langage.

Diversification des terminaux

L'émergence de nouveaux appareils (tablettes, smartphones, ...) a fait apparaître la nécessité de créer des interfaces différentes.

  • On ne navigue pas sur un appareil tactile de la même manière qu'avec un PC et une souris.
  • La quantité de données visible dépend fortement de la taille de l'écran.
  • Côté technique, le développement d'une application mobile nécessite d'utiliser des langages différents.

L'approche API-first

En réponse à ces évolutions techniques, nous avons fait évoluer nos pratiques de développement :

  • Pour apporter à nos utilisateurs le confort des interfaces web modernes, nous employons beaucoup plus largement javascript et ses bibliothèques existantes.
  • La construction des pages HTML, auparavant gérée en PHP, est maintenant entièrement réalisée en javascript. En effet, puisque ce langage modifie par la suite tout ou partie de la page au gré des actions de l'utilisateur, il est cohérent de lui laisser l'entière responsabilité de la gestion du document.
  • PHP garde la responsabilité du côté serveur pour la gestion des données, leur sécurisation et la mise en oeuvre de la logique métier.

Nos applications PHP gardent au final la même structure interne mais au lieu de renvoyer des pages HTML prêtes à afficher, elles ne renvoient plus que des données, à charge de l'application javascript de les utiliser pour construire ses pages. Elles deviennent ainsi des API. L'avantage étant que la même API peut être consommée par une application web ou par une application mobile.

Les impacts du modèle

Découplage front / back

On aboutit ainsi au développement de blocs autonomes : le backend (l'API) pour la partie serveur et le(s) frontend(s) pour l'affichage : application web, application mobile.

  • Le développement de ces blocs peut être organisé en parallèle en affectant à chacun des développeurs ayant l'expertise requise.
  • Le fait de concevoir le front comme une véritable application (et pas seulement comme une série de bricolages en javascript) permet de gagner en cohérence, en maintenabilité et de déployer le potentiel du langage et des bibliothèques existantes.

Nous avons rencontré une difficulté : Ayant davantage d'expertise en PHP, le développement de l'API prend de l'avance sur le développement des interfaces. On se retrouve alors dans la situation où le développement global est à un stade assez avancé mais sans pouvoir le montrer au client.

Repenser la communication client-serveur

Puisque le front et le back deviennent autonomes, l'articulation entre les deux devient une question importante. Le modèle API-first étant maintenant assez répandu, des solutions éprouvées font maintenant un assez large consensus.

  • Le format de données JSON, issu de javascript, permet de transmettre des données suffisamment structurées sous une forme assez compacte.
  • La spécification json:api propose une norme pour les échanges de données entre une API et une application qui la consomme.

L'adoption de ces normes ouvre également la possibilité de faire communiquer nos applications avec des API développées par d'autres acteurs du web.

Conclusion

L'évolution vers ce modèle a été guidée à la fois par les nécessités techniques du web moderne et par les solutions qui ont émergé dans les communautés de développeurs. Cette évolution nous a conduit à acquérir de nouvelles compétences et à maîtriser des outils que nous n'utilisions pas ou peu auparavant. Le code produit gagne en organisation et en cohérence, ce qui rend nos applications globalement plus robustes. Enfin, le fait de s'engager dans une voie largement partagée est un gage de durabilité de nos compétences pour le web de demain.

API PHP JavaScript