Benjamin Geer

Créer des applications hypermédia sécurisées pour un monde aux ressources limitées

Benjamin Geer

Quand je développais des applications web dans les années 1990, il était courant que le server génère des pages HTML à partir de templates, et beaucoup de moteurs de template ont été créés pour cela (y compris par moi). À partir du début des années 2000, les applications web monopages se sont répandues. Dans celles-ci, le serveur renvoie surtout des données au format JSON, alors qu’un framework JavaScript (ou TypeScript) génère le code HTML dans le navigateur. J’ai travaillé sur des applications de ce type et j’ai constaté qu’elles sont difficiles à maintenir, en partie parce que les frameworks JavaScript sont gigantesques et complexes et évoluent rapidement.

On constate aujourd’hui un mécontentement croissant vis-à-vis des applications monopages, non seulement à cause des difficultés de maintenance, mais aussi parce que ces applications doivent charger plusieurs mégaoctets de JavaScript via le réseau avant de pouvoir fonctionner, ce qui les rend lentes, surtout quand la connexion réseau est lente. En même temps, HTML est devenu plus puissant, ce qui rend JavaScript moins indispensable. Par conséquent, il y a un regain d’intérêt pour la génération de code HTML côté serveur.

Un des inconvénients de la génération de code HTML côté serveur dans les années 1990 était la nécessité de recharger la page entière dès qu’un élément changeait. Aujourd’hui cette limitation n’existe plus, grâce à des bibliothèques JavaScript minuscules comme htmx. En ajoutant des attributs déclaratifs aux éléments HTML, on peut permettre à toutes sortes d’interactions utilisateur de récupérer des fragments de code HTML depuis le serveur et de ne remplacer que les parties de la page qui doivent être modifiées. Les applications qui fonctionnent de cette façon sont des « applications hypermédia », et il y a un livre là-dessus qui s’appelle Hypermedia Systems.

Le livre explique la construction d’une application de gestion de contacts à l’aide de htmx, et le code source est fourni en Python. L’ouvrage étant axé sur htmx, le code serveur est très simple : il ne prend en charge que l’anglais, les contacts sont stockés dans un fichier plutôt que dans une base de données, la validation des entrées est très limitée, la pagination est basée sur des numéros de page et il n’y a pas de tests.

Dans un monde aux ressources limitées, il est logique de développer ce type d’applications dans des langages qui se compilent en code machine et utilisent relativement peu de mémoire.1 Nous aimerions avoir la possibilité d’utiliser une base de données très légère comme SQLite ou d’en choisir une plus puissante comme PostgreSQL. Pour éviter les bugs et les failles de sécurité, nous pouvons privilégier les langages à typage statique qui mettent l’accent sur les fonctionnalités de sécurité intégrées. Et nous aimerions que notre application soit facile à maintenir.

Compte tenu de ces préférences, rendons l’application de Hypermedia Systems plus réaliste. Nous allons y ajouter une interface utilisateur internationalisée, une base de données relationnelle avec un index de recherche en texte intégral, une meilleure validation des entrées, une pagination par curseur et des tests d’interface utilisateur. Dans les prochains articles, je présenterai deux implémentations, l’une en Go et l’autre en Rust, utilisant soit SQLite, soit PostgreSQL. J’expliquerai les choix de conception que j’ai faits dans chaque version et j’aborderai des techniques intéressantes qui ont des applications plus larges. N’étant pas concepteur UX, je ne chercherai pas à améliorer l’interface utilisateur décrite dans le livre, mais j’aurai quelques mots à dire sur ce qui peut faciliter le travail des concepteurs UX. Je ne couvrirai pas la plupart des détails expliqués dans Hypermedia Applications, mais vous pouvez lire ces articles sans avoir lu le livre. Réfléchissons donc à des techniques que nous pouvons utiliser pour développer des applications web sécurisées, économes en ressources et faciles à maintenir :

(Ces deux articles peuvent être lus indépendamment l’un de l’autre.)


  1. La relation entre l’efficacité énergétique et le choix du langage de programmation constitue un domaine de recherche très actif. Voir Energy Efficiency of Programming Languages. ↩︎

Catégories :
Sujets :