Supongo que esta es una pregunta extraña para la gran mayoría de los programadores que trabajan diariamente con Java. Yo no. Sé Java-the-language, porque trabajé en proyectos Java, pero no Java-the-world. Nunca hice una aplicación web desde cero en Java. Si tengo que hacerlo con Python, Ruby, sé a dónde ir (Django o Rails), pero si quiero hacer una aplicación web en Clojure, no porque me vean obligado a vivir en un mundo Java, sino porque me gusta el lenguaje y quiero probarlo, ¿qué bibliotecas y marcos debo usar?
216
Respuestas:
Con mucho, el mejor marco web de Clojure que he encontrado es Compojure: http://github.com/weavejester/compojure/tree/master
Es pequeño pero potente y tiene una sintaxis bellamente elegante. (Utiliza Jetty debajo del capó, pero te oculta la API de Servlet a menos que lo desees, lo cual no será frecuente). Mire el archivo README en esa URL, luego descargue una instantánea y comience a jugar.
fuente
Compojure ya no es un marco completo para desarrollar aplicaciones web. Desde la versión 0.4, el componente se ha dividido en varios proyectos.
Ring proporciona la base al abstraer la solicitud HTTP y el proceso de respuesta. Ring analizará la solicitud entrante y generará un mapa que contiene todas las partes de la solicitud, como uri, nombre del servidor y método de solicitud. La aplicación manejará la solicitud y, en función de la solicitud, generará una respuesta. Una respuesta se representa como un mapa que contiene las siguientes claves: estado, encabezados y cuerpo. Entonces una aplicación simple se vería así:
Otra parte de Ring es el concepto de middleware. Este es el código que se encuentra entre el controlador y la solicitud entrante y / o la respuesta saliente. Algunos construidos en middleware incluyen sesiones y stacktrace. El middleware de la sesión agregará: clave de sesión al mapa de solicitud que contiene toda la información de la sesión para el usuario que realiza la solicitud. Si la clave: sesión está presente en el mapa de respuesta, se almacenará para la próxima solicitud realizada por el usuario actual. Mientras que el middleware de seguimiento de pila capturará cualquier excepción que ocurra mientras procesa la solicitud y generará un seguimiento de pila que se envía de vuelta como respuesta si se produce alguna excepción.
Trabajar directamente con Ring puede ser tedioso, por lo que Compojure se basa en Ring abstrayendo los detalles. La aplicación ahora se puede expresar en términos de enrutamiento para que pueda tener algo como esto:
Compojure sigue trabajando con los mapas de solicitud / respuesta para que siempre pueda acceder a ellos si es necesario:
En este caso, la parte {uri: uri} accede a la clave: uri en el mapa de solicitud y establece uri en ese valor.
El último componente es Hiccup, lo que facilita la generación del html. Las diversas etiquetas html se representan como vectores con el primer elemento que representa el nombre de la etiqueta y el resto es el cuerpo de la etiqueta.
"<h2>A header</h2>"
se convierte[:h2 "A Header"]
. Los atributos de una etiqueta están en un mapa opcional."<a href='/login'>Log In Page</a>"
se convierte[:a {:href "/login"} "Log In Page"]
. Aquí hay un pequeño ejemplo usando una plantilla para generar el html.Aquí hay un enlace a un borrador de una documentación que el autor del compuesto está redactando actualmente y que puede resultarle útil: Doc. Compojure
fuente
También hay "Noir" ( http://www.webnoir.org/ ), que es un nuevo marco web de Clojure (tan nuevo que los documentos aún no están allí). Viniendo de Django / Rails, excavo la sintaxis simple y directa y es bastante simple.
fuente
Considere el marco web de Luminus . No tengo afiliación pero he escuchado cosas buenas de amigos a los que respeto.
fuente
Mi biblioteca web actual es ahora yada .
Si recién está comenzando, el servidor introductorio es
Compojure
. Lo veo como elapache
de los servidores web en el mundo de Clojure (en cuyo caso yada / aleph sería nginx). Podrías usarLuminus
como plantilla. Hay variantes de eso, comocompojure-api
.Lo intenté
Pedestal
y estuve globalmente satisfecho con eso. No pretendo dominarlo, pero tiene una sintaxis agradable, se siente muy coherente y parece que tiene un gran rendimiento. También está respaldado porCognitect
(la compañía Clojure / Datomic donde trabaja Rich Hickey).Descubrí
Aleph
que presentaba una abstracción interesante, y la contrapresión incorporada parece interesante. Todavía tengo que jugar con él, pero definitivamente está en mi lista.Después de jugar un poco con varios servidores web, aquí está mi lista rápida de Pro / Contras:
Respuesta corta: eche un vistazo a Luminus para comenzar rápidamente, tal vez pasar a otra cosa a medida que sus necesidades evolucionen (Yada tal vez).
Compojure
Pros (1):
Contras (2):
Pedestal
Pros (3):
Contras (4):
Aleph
Pro (3):
Contras (1):
Yada
Pro (3):
Contras (1):
HttpKit
Pro (2):
Contras (2):
Nginx-Clojure
Nota: no he jugado con él, principalmente debido a la falta de documentación. Sin embargo, parece interesante y muy eficaz.
Pros (2):
Contras (1):
Inmutante
Nota: no he jugado con eso.
Pros:
Contras :
Catacumba
Nota: no he jugado con él, aunque la documentación se ve excelente. Probablemente voy a intentarlo a continuación. Hay ejemplos de proyectos de chat que parecen interesantes, su uso intensivo de protocolos me desanimó al principio como desarrollador novato de Clojure.
Pros (6):
Contras (2):
Nota : un punto de referencia de los servidores web Clojure está disponible, si el rendimiento bruto es lo único que importa
fuente
En estos días, Pedestal es un marco que vale la pena ver. Es un marco del lado del servidor que se basa en Ring , pero también libera la solicitud entrante del subproceso inicial al poder pausar y reanudar esa solicitud en particular (de lo contrario, una solicitud lenta realmente bloquea ese subproceso de servidor). Tal vez algo así como un JavaBean.
Otros frameworks geniales son hoplon.io y David Nolen's Om (basado en React)
fuente
Webjure , un marco de programación web para Clojure.
Características: El servlet de envío llama a las funciones de Clojure. Generación dinámica de HTML. Interfaz de consulta SQL (a través de JDBC).
Esta respuesta se entiende como un marcador de posición para la información de Webjure.
fuente
Compojure es lo que solía construir una pequeña aplicación de blogs. Está modelado en Sinatra, que es un marco web mínimo y liviano para Ruby. La mayoría de las veces solo usé el enrutamiento, que es como el de Sinatra. Parece que:
No hay una biblioteca de plantillas o ORM, pero tiene funciones que convierten los vectores en HTML.
fuente
También puede ver estos marcos (tomados de disclojure / projects ):
También hay una pregunta más relacionada sobre Stack Overflow: ¿marcos web maduros de Clojure?
fuente
Descargo de responsabilidad: soy el autor.
Creé una plantilla de leiningen que combina plantillas de luminusweb y castaño. Entonces obtienes algo con lo que puedes construir código clojure y código clojurescript para front y backend.
Además, proporciona administración de usuarios más una generación simple de CRUD y algunos más pequeños y agradables: https://github.com/sveri/closp
fuente
Pondré mis dos centavos para Duct , también de @weavejester , el responsable de Compojure y Ring.
En esencia, trae el componente y el enrutador de anillo bajo un mismo techo. Razones por las que uso Duct:
Características principales:
Nota: No hace falta decirlo, pero para beneficio de los recién llegados al desarrollo web, como la mayoría de las cosas de Clojurey, Duct requiere una comprensión sólida de Clojure el lenguaje. También recomiendo leer sobre Componente primero.
En otra nota personal, he estado usando Duct en varias aplicaciones de producción durante más de un año y estoy extremadamente contento con él.
fuente
también puede probar Clojure en bobinas, http://github.com/zubairq/coils - descargo de responsabilidad: soy el autor
fuente
Otro servidor web interesante es Http-kit . Tiene buen rendimiento y cumple con los requisitos de anillo, y también tiene soporte para WebSockets. Está hecho principalmente en clojure, y carece de algunas de las cosas extrañas en Jetty / Tomcat.
Es fácil jugar con ellos.
fuente
Reformule y om.next probablemente lo que está buscando.
fuente
Aracne es un marco web recién llegado. Citando la descripción del sitio:
Tiene una campaña de kickstarter que dice ofrecer una experiencia de "inicio" similar a Rails. Está desarrollado por un Cognitect.
Aquí hay una buena discusión al respecto con el autor de Luminus (yogthos).
fuente
He estado usando Liberator con éxito en la producción durante un tiempo. Es un gran marco de trabajo si solo quieres lo básico, por ejemplo, si estás creando un servicio web RESTful o algo similar. Es esencialmente un contenedor para anillo y composición y proporciona un gráfico de decisión al validar las solicitudes entrantes. También es extremadamente rápido en comparación con otros frameworks web más voluminosos. Si desea comenzar en algún lugar rápido y construir lentamente, entonces Liberator es una excelente opción.
fuente