Dans ce guide, je décris les options de framework Web disponibles pour Clojure et donne mes recommandations.
Lancez votre propre pile à partir des bibliothèques recommandées (à venir bientôt) si vous venez d’apprendre. Ce sera le meilleur moyen de comprendre comment tout fonctionne.
Utilisez Pedestal si vous voulez une fondation testée en production sur laquelle construire votre application.
Utilisez Luminus si vous voulez la flexibilité de rouler votre propre pile sans le travail nécessaire.
- Introduction
- Qu’est-ce (et n’est pas) un framework web
- Critères de recommandation
- Documentation
- Communauté
- Maturité
- Normes Web
- Approche
- Déploiement
- Fortement recommandé
- Pedestal (GitHub)
- Luminus (GitHub)
- Autres cadres à noter
- Fulcro (GitHub)
- Duct
- Tadam
- Coast on Clojure (GitHub)
- Hoplon (GitHub)
- Non recommandé
- Pas des frameworks
Introduction
Une question que les débutants en Clojure me posent beaucoup est « Quel framework Web dois-je utiliser? »C’est une bonne question. En Python, il y a Django. En PHP, Drupal. Et bien sûr, dans Ruby, il y a le roi de tous les frameworks web, Ruby on Rails. Mais dans Clojure, c’est une question difficile à répondre. Même décider ce qu’est un framework et ce qu’est une bibliothèque peut être difficile. Nous devrons d’abord aborder cette question.
Qu’est-ce (et n’est pas) un framework web
Aux fins de ce guide, nous définirons un framework Web comme un ensemble de code et de dépendances qui fournissent une approche holistique de la construction d’une application Web. Cette définition exclut plusieurs bibliothèques communément appelées frameworks, telles que Compojure et Ring, car celles-ci ne vous donnent pas, en elles-mêmes, une approche. Cependant, il y a encore plusieurs grands prétendants que je considère ici.
Parce que rouler votre propre pile est une alternative courante dans Clojure à l’utilisation d’un framework pré-construit, et cela peut être considéré comme une approche holistique (à savoir, construire votre application à partir de bibliothèques existantes), je le considère également dans les recommandations.
Critères de recommandation
Le but de ce guide est de donner des recommandations fortes pour les frameworks Web pour différents besoins. Voici les critères que j’examine pour chaque framework :
Documentation
Le framework a-t-il une documentation facile à suivre ? Je recherche des tutoriels pour débutants à travers des sujets avancés.
Communauté
Une grande communauté active est un élément important de la viabilité d’un cadre. Une grande communauté peut plus facilement fournir, maintenir les dépendances à jour et créer une solution plus complète.
Maturité
L’âge d’un projet et la durée de son utilisation en production sur des sites à grande échelle constituent un autre facteur important. Je préfère les cadres plus anciens qui ont été déployés pour des sites importants.
Normes Web
Outre les trois grands langages Web (HTML, CSS et JavaScript), il existe les normes pour le protocole HTTP lui-même et une foule de « meilleures pratiques ». Je parle de codes de réponse HTTP, de négociation de contenu, de CORS, de WebSockets, etc. Comment le cadre utilise-t-il ces normes? Comment les viole-t-il?
Approche
Puisqu’un cadre doit fournir une approche holistique, l’approche elle-même doit être prise en compte. Comment le cadre aborde-t-il la construction d’une application ?
Déploiement
Lorsque votre application est prête, elle doit être déployée. Quelles sont les options de déploiement disponibles ? Une plus grande variété est meilleure.
Fortement recommandé
Cela me fait bizarre de dire cela, mais la meilleure option pour les débutants reste de rouler la vôtre. Rouler votre propre pile n’est pas aussi difficile que cela puisse paraître. Vous pouvez créer une pile fonctionnelle à partir d’une poignée de bibliothèques. Très souvent, les frameworks plus robustes et conçus pour vous ont pris des centaines de décisions pour vous sur la façon de construire la pile, mais ils vous obligent toujours à comprendre la légion de bibliothèques qu’ils ont choisies.
En plus d’être bon pour l’apprentissage, rouler le vôtre vous donne un contrôle complet pour prendre en charge ou non une fonctionnalité donnée.
Le plus gros inconvénient est que vous devez prendre beaucoup de décisions pour vous-même. Il existe de nombreuses bibliothèques et choisir parmi elles peut être une proposition difficile. Une consolation est que, lorsque vous assemblez vos propres bibliothèques, au moins en Clojure, il est relativement facile de changer de bibliothèque si vous trouvez que celle-ci ne fonctionne pas pour vous.
Lorsque vous voulez une solution plus complète (et vous le ferez), si vous continuez à la construire vous-même, vous arriverez à quelque chose qui ressemble beaucoup aux frameworks plus robustes. Je recommanderais de passer à l’une des autres solutions recommandées plutôt que de construire votre propre cadre complet. Heureusement, la commutation entre eux est facile car ils fonctionnent tous sur le Ring standard.
Pedestal (GitHub)
Pedestal est un ensemble mature de bibliothèques, créé à l’origine par Cognitect, pour le développement d’applications Web modernes en streaming. Il est construit autour de connexions à longue durée de vie qui vous permettent de diffuser des données du serveur vers le client au fil du temps. Pour prendre en charge cette fonctionnalité, Pedestal a inventé l’idée des intercepteurs, qui vous permettent de définir des pipelines d’étapes asynchrones que traverse votre demande.
Je recommande Pedestal car il est mature, a une communauté active, il prend en charge une grande variété d’options de déploiement et il prend en charge les applications Web. Les deux coups contre elle sont sa documentation et son absence d’approche unificatrice. Il a quelques guides qui vous guideront à travers le Bonjour de base, Monde! application. Mais je n’ai rien trouvé qui puisse expliquer comment une demande complète devrait être mise en place. Le piédestal d’approche facilite est de fournir le travail de base de bas niveau dont vous aurez besoin, comme un piédestal sur lequel se tenir un peu plus haut que de partir de zéro. Certes, ce travail de base est important, mais il reste beaucoup au développeur de choisir et de construire lui-même. Par exemple, il n’a délibérément pas de solution de modèle HTML. Il appelle cela « API-first ». Je m’attendrais à ce qu’un framework Web complet ait une solution pour créer du HTML.
Malgré ces problèmes, je recommande Pedestal comme base solide et flexible sur laquelle construire des applications.
Luminus (GitHub)
Luminus est essentiellement un projet de modèle. Vous créez une nouvelle application Web à partir de ce modèle et tout est configuré pour vous. Luminus vous donne quelques options pour le modèle, mais en général, son approche consiste à faire les choix pour vous — parfois en fournissant ses propres bibliothèques et parfois en utilisant des bibliothèques existantes. Lorsque votre projet sera créé, vous disposerez d’une pile Web complète sur laquelle vous pourrez vous appuyer ou modifier comme bon vous semble. Le principal avantage est la vision unifiée qui a guidé les choix des bibliothèques.
Luminus vise à fournir tout ce dont vous avez besoin pour écrire des applications web. Vous obtenez tout, des routes à la gestion des sessions, en passant par la compilation ClojureScript et les migrations de bases de données. Tout est préconfiguré, vous pouvez donc commencer immédiatement à utiliser la logique de votre application. Pensez à Luminous comme l’ensemble de bibliothèques et de configurations que vous construiriez vous-même sur 10 ans de travail sur une application. Vous n’en aurez peut-être pas besoin au début, mais finalement, vous voudrez la sécurité, la journalisation, l’internationalisation, entre autres préoccupations. Luminus vous le donne avec une seule commande.
Le principal inconvénient de Luminus est que de nombreuses bibliothèques sont exposées directement. Oui, cela vous donne le pouvoir de les configurer comme vous le souhaitez. Mais cela signifie également que vous avez beaucoup à comprendre si vous souhaitez vous appuyer sur le comportement par défaut. Heureusement, l’histoire de la documentation est excellente. Il existe même un livre qui documente l’approche recommandée pour créer une application Web à l’aide de Luminus.
En outre, il existe depuis des années, a été déployé pour de grandes applications et offre une variété d’options de déploiement.
Autres cadres à noter
Ces cadres sont intéressants pour leurs approches innovantes.
Fulcro (GitHub)
Fulcro est une solution fullstack. Il utilise React sur le frontend, mais il a un modèle de données complet du client à la base de données. Si ce genre de vision unificatrice est attrayant, essayez-le. Il existe une excellente documentation et elle est toujours activement développée.
Duct
Duct est un modèle de leiningen qui aborde la construction d’une application Web sous la forme d’un ensemble de configurations. Par exemple, dans le conduit, le routage est une configuration. La migration est une configuration. En utilisant cette approche unificatrice orientée données, vous créez une application Web qui peut être rechargée de manière déterministe. Le cadre semble gagner du terrain.
Tadam
Tadam a configuré un certain nombre de bibliothèques existantes et créé une structure de répertoires standard pour faciliter l’écriture de sites simples. C’est encore nouveau mais actif.
Coast on Clojure (GitHub)
Coast on Clojure vous offre une solution complète (base de données pour servir HTML) tout en vous concentrant sur la simplicité.
Hoplon (GitHub)
Hoplon est une solution fullstack avec une approche intéressante. La partie frontend compile ClojureScript et vous permet de créer des composants interactifs utilisant un modèle de flux de données de type feuille de calcul. Il peut se connecter au backend en appelant des fonctions qui sont des proxy de fonctions sur le serveur. Cela vous permet de contourner toute la situation de routage. Le développement est lent.
Non recommandé
Ces frameworks ne sont pas recommandés car ils n’ont pas été développés activement depuis trop longtemps et n’ont jamais eu assez de traction. Je ne les ai pas évalués sur des mérites techniques car je ne les recommanderais pas en fonction de leur seul développement inactif.
- webnf
- Clojure on Coils
- joodoo
- Datsys
Pas des frameworks
Ces projets sont souvent appelés frameworks mais ils ne répondent pas à la définition de « fournir une approche holistique de la construction d’une application Web ». Je ne les ai pas évalués ici.