¿Qué Marco Web Debo Usar en Clojure?

En esta guía, describo las opciones de marco web disponibles para Clojure y doy mis recomendaciones.

Saca tu propia pila de las bibliotecas recomendadas (próximamente) si solo estás aprendiendo. Será la mejor manera de entender cómo funciona todo.

Use Pedestal si desea una base probada en producción sobre la que construir su aplicación.

Utilice Luminus si desea la flexibilidad de rodar su propia pila sin el trabajo necesario.

Introducción

Una pregunta que me hacen muchos principiantes en Clojure es «¿Qué marco web debo usar?»Esta es una buena pregunta. En Python, está Django. En PHP, Drupal. Y por supuesto en Ruby, está el rey de todos los frameworks web, Ruby on Rails. Pero en Clojure, esta es una pregunta difícil de responder. Incluso decidir qué es un marco y qué es una biblioteca puede ser difícil. Tendremos que abordar eso primero.

Qué es (y qué no es) un marco web

A los efectos de esta guía, definiremos un marco web como una colección de código y dependencias que proporcionan un enfoque holístico para crear una aplicación web. Esta definición descarta varias bibliotecas que comúnmente se denominan frameworks, como Compojure y Ring, ya que, por sí solas, no proporcionan un enfoque. Sin embargo, todavía hay varios grandes contendientes que considero aquí.

Debido a que rodar su propia pila es una alternativa común en Clojure al uso de un marco pre-construido, y se puede considerar un enfoque holístico (es decir, construir su aplicación a partir de bibliotecas existentes), lo considero también en las recomendaciones.

Criterios de recomendación

El propósito de esta guía es dar recomendaciones sólidas para marcos web para diferentes necesidades. Estos son los criterios que examino sobre cada framework:

Documentación

¿El framework tiene documentación fácil de seguir? Busco tutoriales para principiantes a través de temas avanzados.

Comunidad

Una comunidad grande y activa es una parte importante de la viabilidad de un marco. Una comunidad grande puede proporcionar más fácilmente, mantener las dependencias actualizadas y construir una solución más completa.

Madurez

La antigüedad de un proyecto, y el tiempo que se ha utilizado en la producción en sitios a gran escala, es otro factor importante. Prefiero marcos más antiguos que se hayan implementado para sitios importantes.

Estándares web

Además de los tres grandes lenguajes web (HTML, CSS y JavaScript), existen los estándares para el protocolo HTTP en sí y una serie de «mejores prácticas». Estoy hablando de códigos de respuesta HTTP, negociación de contenido, CORS, WebSockets, etc. ¿Cómo utiliza el marco esas normas? ¿Cómo los viola?

Enfoque

Dado que un marco debe proporcionar un enfoque holístico, el enfoque en sí debe tenerse en cuenta. ¿Cómo aborda el marco la creación de una aplicación?

Implementación

Cuando la aplicación esté lista, debe implementarse. ¿Qué opciones de implementación están disponibles? Una variedad más amplia es mejor.

Muy recomendable

Me parece raro decir esto, pero la mejor opción para principiantes sigue siendo rodar la tuya. Rodar tu propia pila no es tan difícil como parece. Puede crear una pila funcional a partir de un puñado de bibliotecas. Muy a menudo, los frameworks más robustos y diseñados para ti han tomado cientos de decisiones sobre cómo construir la pila, pero aún requieren que entiendas la legión de bibliotecas que eligieron.

Además de ser bueno para aprender, rodar el tuyo te da un control completo para admitir o no una función determinada.

El mayor inconveniente es que debes tomar muchas decisiones por ti mismo. Hay muchas bibliotecas por ahí y elegir entre ellas puede ser una propuesta difícil. Un consuelo es que, al armar sus propias bibliotecas, al menos en Clojure, es relativamente fácil cambiar de biblioteca si encuentra que una no funciona para usted.

Cuando desee una solución más completa (y lo hará), si continúa construyéndola usted mismo, llegará a algo que se parece mucho a los frameworks más robustos. Recomendaría cambiar a una de las otras soluciones recomendadas en lugar de construir su propio marco completo. Afortunadamente, cambiar entre ellos es fácil, ya que todos funcionan con el anillo estándar.

Pedestal (GitHub)

Pedestal es un conjunto maduro de bibliotecas, creado originalmente por Cognitect, para desarrollar aplicaciones web modernas de transmisión. Se basa en conexiones de larga duración que le permiten transmitir datos del servidor al cliente a lo largo del tiempo. Para admitir esa característica, Pedestal inventó la idea de interceptores, que le brindan una forma de definir canalizaciones de pasos asíncronos por los que pasa su solicitud.

Recomiendo Pedestal porque es maduro, tiene una comunidad activa, admite una gran variedad de opciones de implementación y tiene un buen soporte para aplicaciones web. Los dos golpes en su contra son su documentación y su falta de un enfoque unificador. Tiene algunas guías que te guiarán a través de Hello, World básico! aplicación. Pero no he encontrado nada que explique cómo se debe armar una solicitud completa. El pedestal de aproximación facilita el trabajo de base de bajo nivel que necesitará, como un pedestal en el que pararse un poco más alto que comenzar desde cero. Sin duda, ese trabajo de base es importante, pero mucho queda para que el desarrollador elija y construya por sí mismo. Por ejemplo, a propósito no tiene una solución de plantillas HTML. Lo llama «API-first». Esperaría que un marco web completo tuviera una solución para crear HTML.

A pesar de estos problemas, recomiendo Pedestal como una base sólida y flexible sobre la que construir aplicaciones.

Luminus (GitHub)

Luminus es esencialmente un proyecto de plantilla. Crea una nueva aplicación web a partir de esa plantilla y todo está configurado para usted. Luminus le da algunas opciones para la plantilla, pero en general, su enfoque es tomar las decisiones por usted, a veces proporcionando sus propias bibliotecas y, a veces, utilizando bibliotecas existentes. Cuando se cree su proyecto, tendrá una pila web completa que es suya para construir o modificar como mejor le parezca. La principal ventaja es la visión unificada que guió las elecciones de las bibliotecas.

Luminus tiene como objetivo proporcionar todo lo que necesita para escribir aplicaciones web. Obtiene todo, desde rutas hasta administración de sesiones, compilación de ClojureScript y migraciones de bases de datos. Todo viene preconfigurado, para que pueda comenzar con la lógica de su aplicación de inmediato. Piense en Luminous como el conjunto de bibliotecas y configuraciones que construiría a lo largo de 10 años de trabajo en una aplicación. Es posible que no lo necesite al principio, pero eventualmente querrá seguridad, registro, internacionalización, entre otras preocupaciones. Luminus te da eso con una orden.

El principal inconveniente de Luminus es que muchas de las bibliotecas están expuestas directamente. Sí, eso te da el poder de configurarlos como quieras. Pero también significa que tiene mucho que entender si desea basarse en el comportamiento predeterminado. Afortunadamente, la historia de la documentación es excelente. Incluso hay un libro que documenta el enfoque recomendado para construir una aplicación web utilizando Luminus.

Además, ha existido durante años, se ha implementado para aplicaciones grandes y tiene una variedad de opciones de implementación.

Otros marcos de referencia

Estos marcos son interesantes por sus enfoques innovadores.

Fulcro (GitHub)

Fulcro es una solución de paquete completo. Utiliza React en el frontend, pero tiene un modelo de datos completo desde el cliente hasta la base de datos. Si ese tipo de visión unificadora es atractiva, pruébala. Existe una documentación excelente y todavía se está desarrollando activamente.

Duct

Duct es una plantilla de leiningen que aborda la construcción de una aplicación web como un conjunto de configuraciones. Por ejemplo, en Duct, el enrutamiento es una configuración. La migración es una configuración. Con este enfoque unificador y orientado a los datos, se crea una aplicación web que se puede recargar de forma determinista. El marco parece estar recibiendo tracción.

Tadam

Tadam ha configurado una serie de bibliotecas existentes y ha creado una estructura de directorios estándar para hacer que escribir sitios simples sea muy fácil. Todavía es nuevo, pero activo.

Coast on Clojure (GitHub)

Coast on Clojure le ofrece una solución completa (base de datos para servir HTML) mientras se centra en mantener las cosas simples.

Hoplon (GitHub)

Hoplon es una solución fullstack con un enfoque interesante. La parte frontend compila ClojureScript y le permite crear componentes interactivos que utilizan un modelo de flujo de datos similar a una hoja de cálculo. Se puede conectar al backend llamando a funciones que son proxies de funciones en el servidor. Esto le permite evitar toda la situación de enrutamiento. Desarrollo es lento.

No recomendado

Estos marcos no se recomiendan porque no se han desarrollado activamente durante demasiado tiempo y nunca obtuvieron suficiente tracción. No los he evaluado por méritos técnicos porque no los recomendaría basándose únicamente en su desarrollo inactivo.

  • webnf
  • Clojure on Coils
  • joodoo
  • Datsys

No frameworks

Estos proyectos a menudo se denominan frameworks, pero no cumplen con la definición de «proporcionar un enfoque holístico para construir una aplicación web». No los he evaluado aquí.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.