Header Ads Widget

Ticker

6/recent/ticker-posts

Más de 10 marcos para crear aplicaciones web en Clojure

 


Clojure es un lenguaje poderoso, pero como con cualquier lenguaje, su verdadero poder proviene de la extensibilidad . La capacidad de conectar módulos adicionales y abrir la funcionalidad es clave para el desarrollo adecuado de una aplicación Clojure y, como tal, comprender cómo funciona Clojure y cómo se entrelazan los distintos marcos es clave para un desarrollo adecuado.

Hoy, vamos a echar un vistazo a Clojure y observar algunos marcos comunes que se ofrecen. Resumiremos brevemente estos marcos y, con suerte, crearemos un recurso para que los nuevos desarrolladores de Clojure encuentren su solución dada. Tenga en cuenta que esta lista no se proporciona en ningún orden específico y solo sirve para informar sobre las ofertas generales disponibles.

¿Qué es Clojure (brevemente)?

Clojure es un lenguaje único diseñado desde cero para ser la mejor de muchas cualidades. El autor, Rich Hickey , estableció algunos requisitos que estaba buscando antes de decidirse a crear Clojure:

¿Por qué escribí otro lenguaje de programación? Básicamente porque quería:

  • Un Lisp
  • para programación funcional
  • simbiótico con una plataforma establecida
  • diseñado para la concurrencia

y no pude encontrar uno.

Con esto en mente, Hickey comenzó a desarrollar Clojure para que fuera una especie de "lenguaje de lista de deseos". Comenzó concentrándose en hacer una variante moderna similar a Lisp que fuera simbiótica con Java, considerando que JVM era una plataforma establecida, probada y confiable Llegó a decir en la documentación de Clojure que considera las máquinas virtuales , no los sistemas operativos, como las plataformas del futuro, y cubrió sus apuestas sobre este argumento. A partir de aquí, incorporó la idea de identidades , vinculándolas directamente a estados expresados ​​en el tiempo. Todo el concepto de estados depende de las cualidades inmutables de los datos, y la concurrencia luego maneja estos cambios de estado utilizando tipos de referencia.

Todo esto se basó en el principio de que el lenguaje sería simbiótico con Java : el propio Clojure se ejecuta en la JVM (máquina virtual de Java) y, como tal, el código Java se puede utilizar para llamar a las funciones de Clojure y viceversa. Clojure se basa en expresiones S , lo que significa que, como la mayoría de las implementaciones de Lisp, un lector definido analiza primero la sintaxis en estructuras de datos antes de compilarla.

Un gran enfoque para Clojure fue la idea de que Clojure debería integrarse en programación funcional. La idea de estructuras de datos inmutables y evitar la tipificación estática llevó a la adopción de tipos muy dinámicos con una estructura de datos persistente y estrictamente inmutable en su núcleo. Este enfoque híbrido, en última instancia, va en contra de la orientación a objetos que se ha vuelto tan común en la programación, incluso cuando su uso es inapropiado.

Cabe señalar que, si bien Clojure es en sí mismo un lenguaje, en la práctica, con su gran comunidad central funcionando para desarrollarlo y mejorarlo continuamente, casi forma una plataforma de plantillas y bibliotecas modulares más que un simple lenguaje. Debido a esto, Clojure tiene mucho que ofrecer; es probable que, si desea hacer algo con Clojure, la solución esté ahí.

Frameworks

Por supuesto, este enfoque en la iteración de la comunidad significa que hay muchas posibilidades para implementaciones específicas. La amplitud de plantillas y bibliotecas modulares antes mencionada es el núcleo de lo que hace que Clojure sea tan atractivo: es lo suficientemente universal como para funcionar en casi cualquier JVM, a la vez que es dinámico hasta el punto de ofrecer una amplia gama de funcionalidades. Echemos un vistazo a algunos de estos posibles marcos.

Bibliotecas Compojure y de enrutamiento alternativo

Desde el principio, deberíamos abordar el problema del enrutamiento de bibliotecas a través de su representante más grande: Compojure . Aunque técnicamente no es un marco, Compojure se describe a menudo como tal. Compojure es en gran parte una biblioteca que maneja el enrutamiento y muy poco más allá de las funciones terciarias para ese propósito. Una de las razones por las que a menudo se lo considera un marco es porque está muy ampliamente adoptado.

Dicho esto, hay muchas alternativas a Compojure, incluidas gudu , bidi , Reitit y playnice . Estos son útiles en sus propios casos de uso, pero están fuera del alcance de esta pieza, ya que no son marcos realmente completos.

Catacumba

Catacumba es un marco relativamente joven construido sobre la idea de construir una alternativa asincrónica a Ring sin las limitaciones inherentes a esa implementación. El enfoque en aplicaciones web asincrónicas diferencia a Catacumba de otras en esta lista, especialmente en su soporte para abstracciones como promesas y flujos reactivos. Su enfoque en la reducción de restricciones se refleja en su código base de desarrollo y, debido a esto, la implementación es altamente modular, potente y liviana.

Desafortunadamente, el enfoque específico de Catacumba significa que no es realmente apto para la integración de pila completa: es limitado, poderoso en lo que hace, pero en última instancia está diseñado específicamente para aplicaciones asincrónicas y sin opiniones. Debido a esto, tiene aplicaciones bastante limitadas y debe considerarse solo cuando la aplicación en sí cumple con los requisitos que impulsaron la creación de Catacumba en primer lugar.

Lea también: 13 marcos de trabajo Node.js para crear API web

ClojureHomePage

ClojureHomePage es un marco único en el que se centra casi por completo en la creación de una página web utilizando Clojure tanto para el front como para el backend . Es compatible con una amplia gama de encabezados web, variables ambientales y rutas, y es capaz de generar HTML y CSS bastante complejos. Además, su soporte para funciones SQL significa que, mientras se genera el frontend, el backend también lo está de una manera muy estrechamente integrada y poderosa .

Por supuesto, al igual que Catacumba, esto plantea la cuestión de si ClojureHomePage es apropiado o no para cualquier situación en la que no se genere una página de inicio. Se podría argumentar que podría ser efectivo crear una API como si fuera una página de inicio, creando un servicio web en un portal, pero en algunos casos, es posible que una API de Clojure nunca sea pública de esa manera. En consecuencia, en este caso, considere los requisitos antes de la implementación.

Hoplon

Otro de los marcos de aplicaciones web de una sola página , Hoplon proporciona una gran cantidad de bibliotecas Clojure y ClojureScript para desarrollar estas aplicaciones web. Hoplon utiliza tres bibliotecas principales: HLisp se utiliza para formar elementos HTML personalizados como funciones regulares, Javelin proporciona una interfaz similar a una hoja de cálculo para modelar el comportamiento reactivo y Castra facilita todas las interacciones del servidor.

Una vez más, sin embargo, Hoplon está bastante limitado a una función singular y los módulos que se requieren para realizar esas funciones. Como tal, es muy limitado, y si no tiene la intención de crear una aplicación web de una sola página, su valor es bastante limitado.

Luminus

Luminus se define a sí mismo como un micro-framework , y eso es más o menos lo que es; como tal, solo hace algunas cosas, pero las hace muy bien. Lumius funciona como una especie de sistema de plantillas, proporcionando un sistema de desarrollo integrado y algunos módulos predeterminados para impulsar el desarrollo.

Dicho esto, hay algo que decir sobre la creación de módulos especialmente diseñados para su implementación específica, y optar por no hacerlo a cambio de un desarrollo más rápido puede incurrir en sus propios costos en el desarrollo futuro.

Por supuesto, existe un gran beneficio para la modularidad predefinida, y debe tenerse en cuenta que poder iniciar un proyecto casi de inmediato y al mismo tiempo deshabilitar módulos no tiene ningún uso para resultados en una implementación de alta eficacia y bajo costo de recursos.

Relacionado: 7 marcos para construir una API REST en Go

Bigote

Moustache es otro micro-framework para Clojure, pero el espacio en el que opera es bastante importante: actúa como una especie de tránsito entre Ring y varios otros middlewares. Si bien esto puede parecer simple y, de hecho, la única macro necesaria para ejecutarlo es de appacuerdo con su propia documentación, su uso facilita una amplia gama de interacciones . Cualquier cosa que necesite un controlador Ring, una ruta definida, una cadena de texto sin formato o un envío de método HTTP puede utilizar Moustache.

Este es otro caso en el que el marco es tan "micro" que es difícil considerarlo un marco adecuado; dicho esto, debido al potencial que permite, podría considerarse para las API de Clojure, especialmente teniendo en cuenta el hecho de que las API REST pueden beneficiarse desde su enfoque en vincular el contenido HTTP , que es en esencia una etapa importante de facilitación para la integración hipermedia .

Macchiato

Macchiato está en el otro extremo del espectro en comparación con Moustache, ofreciendo una verdadera amplitud y variedad de opciones dentro de sus diversas bibliotecas. Cada componente es autónomo, lo que lo hace altamente modular, y estos módulos en sí mismos facilitan bastante funcionalidad.

Por ejemplo, podemos mirar tres bibliotecas aleatorias implementadas en el marco para ver qué tan amplias son estas opciones. macchiato-cryptoes una biblioteca que codifica contraseñas de forma segura utilizando bcrypt o scrypt. También admite la verificación de estas contraseñas con una contraseña de texto sin formato para fines de hash. macchiato-db-scratchpades un sistema experimental que permite probar diferentes implementaciones y enfoques de bases de datos dentro de Macchiato. macchiato-templatees un sistema de plantillas simple que permite la creación rápida de aplicaciones basadas en Macchiato.

Como puede ver, la amplia gama de opciones que habilita Macchiato es bastante valiosa y, como tal, si está comenzando su desarrollo desde cero, ciertamente es algo a considerar.

Conducto

Duct es un marco de creación de aplicaciones basado en Integrant , diseñado para ser altamente modular . En esencia, Duct forma un tipo de "plano" maestro para las aplicaciones que utilizan un archivo de configuración inmutable con una alta preferencia por el estado local sobre el estado global. Además, Duct prefiere agrupar funciones por propósito en lugar de por capas, lo que hace que el desarrollo sea algo más intuitivo y expresivo en comparación con la agrupación tradicional de "capas" que a menudo domina los métodos de desarrollo tradicionales.

Dicho esto, llamar a Duct un marco está un poco fuera de lugar; en la práctica, es mucho más una plantilla , aunque poderosa. Nuevamente, si está comenzando el desarrollo desde abajo, definitivamente vale la pena considerarlo, pero para las API y aplicaciones existentes, la idea de convertir a una plantilla completamente nueva podría dificultar su adopción.

Consulte: 5 marcos PHP ligeros para crear API REST

Conjurar

Conjure se basa en la idea de simplificar las aplicaciones respaldadas por bases de datos mediante el uso de un marco similar a Rails. Con este fin, Conjure se basa en gran medida en bibliotecas de terceros existentes , como se admite en su propia documentación. Dicho esto, Conjure es una biblioteca poderosa para simplificar los aspectos de la base de datos de una aplicación moderna, que a menudo es la etapa más laboriosa y compleja del ciclo de vida del desarrollo. Solo por esta razón, debe considerarse, aunque dentro de los límites de la comprensión de lo que hace funcionalmente, cuán limitado está a un área funcional específica y el hecho de que tiene dependencia de terceros.

Pedestal

Pedestal es un conjunto de bibliotecas muy poderoso diseñado específicamente en torno a la construcción de API. Si bien muchos en esta lista se enfocan en la creación de aplicaciones de una sola página, referidas como el "modelo de página" en la documentación de Pedestal, Pedestal está diseñado para construir API específicamente primero . También es altamente modular, lo que lo convierte en una opción principal para el desarrollo específico de API.

El verdadero poder detrás de Pedestal es el hecho de que se basa en conexiones de protocolo, lo que permite un alto grado de personalización, casi al borde del "plug and play". Además, el hecho de que admita encabezados seguros y otras mejores prácticas lo convierte en una oferta clave para API en Clojure que pretenden tener seguridad de calidad, como debería ser cualquier buena aplicación moderna.

Otros marcos:

  • Fulcro : una biblioteca para el desarrollo de aplicaciones web de pila completa de una sola página en clj / cljs
  • Re-frame : un marco de reactivos para escribir SPA, en Clojurescript.
Además: más de 12 marcos para crear bots de ChatOps

Conclusión

Clojure es un ejemplo perfecto de potencia modular . Si bien Clojure en sí es ciertamente un lenguaje útil, está algo limitado a un caso de uso y función específicos. La adopción de bibliotecas y marcos modulares adicionales convierte a Clojure en un fuerte competidor para el desarrollo de aplicaciones web, servicios y API modernos.

Dicho esto, cada uno de estos marcos tiene sus propias advertencias, una de las cuales es el hecho de que una aplicación determinada puede requerir varias bibliotecas, módulos y marcos para incluso hacer lo que se requiere en primer lugar. Si bien eso puede ser una estafa para algunos, sin embargo, es un beneficio para otros: la idea de un sistema altamente modular es ciertamente valiosa, y junto con el espíritu y los enfoques de diseño adecuados puede resultar en algo mayor que la suma de sus partes

Publicar un comentario

0 Comentarios