48 votes

Cadres web Clojure matures ?

Quels sont les choix actuels en matière de frameworks web Clojure matures ? Je cherche une sorte de matrice de fonctionnalités me disant ce que les frameworks populaires supportent et dans quelle mesure, y compris :

  • Modélisation de la réponse (réponse écrite en Clojure ou dans un autre balisage - par exemple, comme JSP avec Tiles)
  • Sessions HTTP
  • REST avec mise en correspondance automatique des URL avec les fonctions d'action et les paramètres.
  • Formulaires HTML (paramètres disponibles comme carte, gestion des erreurs, validation)
  • Flux d'applications (connu des cadres Java - les gestionnaires de demandes renvoient des identifiants d'actions qui sont finalement traités par les moteurs de rendu).

33voto

Michał Marczyk Points 54179

Peut-être ma réponse à la Quel est le bon point de départ pour développer un service web RESTful en Clojure ? La question sur le SO pourrait vous être utile. Elle mentionne quelques bibliothèques web importantes pour Clojure (avec des liens et de courts résumés). Le point clé que je voudrais rappeler ici est énoncé dans le premier paragraphe de cette réponse :

Tout d'abord, je pense qu'il est peu probable que vous trouviez une solution unique et compacte pour faire tout cela en Clojure (sauf sous la forme d'une bibliothèque Java à utiliser par interopérabilité). Ce qui est en train de devenir la pile Web standard de Clojure comprend un certain nombre de bibliothèques que les gens mélangent et associent de toutes sortes de façons (puisqu'elles ont heureusement tendance à être parfaitement compatibles).

J'ajouterais à cela que vous ne devez probablement pas vous attendre à gérer les choses avec le type de "flux d'application" que vous connaissez de Java (ou si vous pensez en avoir vraiment besoin, vous devrez probablement créer votre propre librairie pour le supporter !) Mais ce n'est pas grave, car les gens semblent être très satisfaits de l'approche de Ring, qui consiste à utiliser un gestionnaire comme une fonction et un intergiciel d'ordre supérieur.


Pour répondre à vos balles :

  • Modèle de réponse :
    Il existe un certain nombre de solutions spécifiques à Clojure, notamment Enlive y Hiccup (Enlive est un moteur très puissant de scraping / templating / transformation de HTML ; Hiccup est un DSL pour écrire du HTML en Clojure avec la propriété intéressante qu'il restitue rapide ). De plus, il s'agit probablement d'un endroit où il est parfaitement judicieux de passer à Java et d'utiliser quelque chose comme, par exemple, , StringTemplate . Cela a même le bon côté de décourager le mélange de modèles et de logique ! (Je crois que Stuart Halloway a mentionné que Relevance -- sa société -- utilise cette stratégie dans son travail et connaît un grand succès).

  • Sessions HTTP
    Ce serait Sandbar Je suppose. L'auteur a commencé une série d'articles de blog à ce sujet qui semble très prometteur.

  • REST avec mise en correspondance automatique des URL avec les fonctions d'action et les paramètres.
    C'est Bague & Compojure et/ou Moustache . Voir ci-dessous.

  • Formulaires HTML (paramètres disponibles comme carte, gestion des erreurs, validation)
    Comme ci-dessus.

  • Flux d'applications (connu des cadres Java - les gestionnaires de demandes renvoient des identifiants d'actions qui sont finalement traités par les moteurs de rendu).
    Comme mentionné ci-dessus, ce n'est pas vraiment quelque chose que les gens ont tendance à faire en Clojure.


Comme point de départ dans l'apprentissage de la pile web Clojure, ce tutoriel sur les anneaux par Bague de l'auteur Mark McGranaghan est très utile. Compojure L'auteur James Reeves a quelques documents sur Compojure. Peut-être ma réponse récente à la Quelle est la "grande idée" derrière les routes compojurées ? Cette question pourrait également vous aider. Les sources de Ring comprennent également un excellent document SPEC.

14voto

mikera Points 63056

Depuis que cette question a été initialement posée/répondue, la Cadre web noir est apparu comme une solution prometteuse.

Il utilise hiccup pour la partie templating, mais offre un cadre plus complet autour de cela.

Exemple de code de base de la page principale de Noir :

(ns my-app
  (:use noir.core)
  (:require [noir.server :as server]))

(defpage "/welcome" []
    "Welcome to Noir!")

(server/start 8080)

8voto

crazy_phage Points 94

Je vous recommanderai d'utiliser Luminus non seulement à cause de son nom génial, mais aussi à cause de ses caractéristiques.

Et comme Noir n'est plus maintenu, je ne vous recommande pas de l'utiliser. C'est aussi un bon choix de commencer par Ring & Compojure dès le début pour construire votre propre framework.

1voto

Vous posez peut-être la mauvaise question. Ce que je vois dans votre question, c'est "quel framework Clojure ressemble le plus aux frameworks Java orientés objet auxquels je suis habitué ?". Il n'y a pas de bonne réponse à cette question ; si vous ne vous sentez à l'aise qu'avec une approche côté serveur avec état (comme Grails ou Tapestry), vous devriez peut-être en rester là et trouver un moyen d'implémenter une partie de votre backend en Clojure.

D'un autre côté, si vous voulez construire quelque chose de plus fidèle à Clojure, vous voudrez peut-être trouver votre propre mélange. J'ai obtenu de bons résultats en utilisant AngularJS et CoffeeScript sur le client, et Clojure (avec Ring et Bishop) sur le serveur (bien que nous soyons en train de passer de Bishop à Liberator). Quoi qu'il en soit, une fois que vous aurez adopté l'approche de l'application Web à " page unique " et commencé à traiter le côté serveur comme une source et un puits de données, vous constaterez que Clojure fonctionne exceptionnellement bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X