neste guia, descrevo as opções de framework web disponíveis para a Clojure e dou as minhas recomendações.Role a sua própria pilha a partir das bibliotecas recomendadas (em breve), se estiver apenas a aprender. Será a melhor maneira de entender como tudo funciona.Use Pedestal se quiser uma base testada na produção sobre a qual construir a sua aplicação.
utilize Luminus se quiser a flexibilidade de rolar a sua própria pilha sem o trabalho envolvido.
Introduction
One question that I am asked a lot by beginners in Clojure is ” What web framework should I use?”Esta é uma boa pergunta. Em Python, há o Django. Em PHP, Drupal. E, claro, em Ruby, há o rei de todas as estruturas da web, Ruby on Rails. Mas em Clojure, esta é uma pergunta difícil de responder. Mesmo decidir o que é um framework e o que é uma biblioteca pode ser difícil. Teremos de tratar disso primeiro.
What is (and isn’t) a web framework
For the purposes of this guide, we will definate a web framework as a collection of code and dependencies that provide a holistic approach to building a web application. Esta definição exclui várias bibliotecas que são comumente chamadas de frameworks, como Compojure e Ring, uma vez que essas não, por si só, lhe dão uma abordagem. No entanto, há ainda vários grandes candidatos que eu considero aqui.
porque rodar a sua própria pilha é uma alternativa comum em Clojure ao uso de uma estrutura pré-construída, e pode ser considerada uma abordagem holística (nomeadamente, construir a sua aplicação a partir de bibliotecas existentes), eu considero isso também nas recomendações.
critérios de recomendação
o objectivo do presente guia é dar recomendações fortes aos quadros web para diferentes necessidades. Aqui estão os critérios que eu examino sobre cada framework:
documentação
o framework tem documentação fácil de seguir? Procuro tutoriais principiantes através de tópicos avançados.Uma grande comunidade activa é uma parte importante da viabilidade de um enquadramento. Uma grande comunidade pode mais facilmente fornecer, manter as dependências atualizadas e construir uma solução mais completa.Outro factor importante é a idade de um projecto e o tempo durante o qual foi utilizado na produção em locais de grande escala. Eu prefiro quadros mais antigos que foram implantados para locais significativos.
padrões web
além das três grandes linguagens web (HTML, CSS e JavaScript), existem os padrões para o protocolo HTTP em si e uma série de “melhores práticas”. Estou falando de códigos de resposta HTTP, negociação de conteúdo, CORS, WebSockets, etc. Como é que o quadro utiliza essas normas? Como é que isso os viola?Uma vez que um quadro deve fornecer uma abordagem holística, a própria abordagem deve ser tida em conta. Como é que a abordagem-quadro constrói uma aplicação?
implantação
quando a sua aplicação estiver pronta, precisa de ser implantada. Que opções de implantação estão disponíveis? Uma variedade mais ampla é melhor.
altamente recomendado
é estranho para mim dizer isto, mas a melhor opção para iniciantes ainda é rolar o seu próprio. Rolar a sua própria pilha não é tão difícil como pode parecer. Você pode construir uma pilha funcional a partir de um punhado de bibliotecas. Muitas vezes, os frameworks mais robustos, construídos para vocês, tomaram centenas de decisões sobre como construir a pilha, mas eles ainda exigem que vocês entendam a legião de bibliotecas que escolheram.
além de ser bom para a aprendizagem, rolar o seu próprio dá-lhe controlo completo para suportar ou não suportar um dado recurso.
a maior desvantagem é que você deve tomar um monte de decisões por si mesmo. Há muitas bibliotecas por aí e escolher entre elas pode ser uma proposta difícil. Uma consolação é que, ao colocar suas próprias bibliotecas juntas, pelo menos em Clojure, é relativamente fácil mudar de bibliotecas se você descobrir que uma não funciona para você.
quando você quer uma solução mais completa (e vai querer), se você continuar a construí-la você mesmo, você vai chegar a algo que é muito parecido com os frameworks mais robustos. Gostaria de recomendar a mudança para uma das outras soluções recomendadas em vez de construir o seu próprio quadro completo. Felizmente, trocar entre eles é fácil uma vez que todos trabalham no padrão do anel.Pedestal (GitHub) é um conjunto maduro de bibliotecas, originalmente criado pela Cognitect, para o desenvolvimento de aplicações web modernas. Ele é construído em torno de conexões de longa duração que lhe permitem transmitir dados do servidor para o cliente ao longo do tempo. Para apoiar esse recurso, o Pedestal inventou a ideia de interceptadores, que lhe dão uma forma de definir condutas de passos assíncronos que o seu pedido Passa.
eu recomendo Pedestal porque é maduro, tem uma comunidade ativa, suporta uma grande variedade de opções de implantação, e tem um bom suporte para aplicações web. Os dois batem contra ele são a sua documentação e a sua falta de uma abordagem unificadora. Ele tem alguns guias que vão levá-lo através de Hello básico, mundo! aplicacao. Mas não encontrei nada que explique como é que uma candidatura completa deve ser feita. O Pedestal de aproximação facilita é fornecer a base de baixo nível que você vai precisar, como um pedestal sobre o qual ficar um pouco mais alto do que começar do zero. Para ter certeza, esse trabalho de base é importante, mas muito é deixado para o desenvolvedor para escolher e construir-se. Por exemplo, ele propositadamente não tem uma solução de templação HTML. Chama-lhe “API-first”. Eu esperaria um framework web completo para ter uma solução para criar HTML.Apesar destas questões, eu recomendo Pedestal como uma base sólida e flexível sobre a qual construir aplicações.Luminus (GitHub)
Luminus é essencialmente um projeto modelo. Você cria uma nova aplicação web a partir desse modelo, e tudo está configurado para você. O Luminus dá-lhe algumas opções para o modelo, mas, em geral, a sua abordagem é fazer as escolhas para si—por vezes fornecendo as suas próprias bibliotecas e, por vezes, utilizando bibliotecas existentes. Quando o seu projeto é criado, você terá uma pilha completa da web que é sua para construir ou modificar como achar melhor. A principal vantagem é a visão unificada que guiou as escolhas das bibliotecas.
Luminus tem como objectivo fornecer tudo o que necessita para escrever aplicações web. Você consegue tudo desde rotas, gestão de sessões, Compilação ClojureScript, migração de banco de dados. Tudo vem pré-configurado, então você pode começar com a sua lógica de aplicação imediatamente. Pense em luminosos como o conjunto de bibliotecas e configurações que você construiria ao longo de 10 anos de trabalho em uma aplicação. Você pode não precisar dele no início, mas eventualmente você vai querer segurança, registro, internacionalização, entre outras preocupações. Luminus dá-te isso com um comando.
a principal desvantagem com Luminus é que muitas das bibliotecas estão expostas diretamente. Sim, isso lhe dá o poder de configurá-los como quiser. Mas isso também significa que você tem muito para entender se você quiser construir sobre o comportamento padrão. Felizmente, a história da documentação é excelente. Há até um livro que documenta a abordagem recomendada para construir uma aplicação web usando Luminus.
além disso, tem sido em torno de anos, foi implantado para grandes aplicações, e tem uma variedade de opções de implantação.Estes quadros são interessantes pelas suas abordagens inovadoras.O Fulcro (GitHub) é uma solução de fullstack. Ele usa Reat on the frontend, mas tem um modelo de dados completo de cliente para banco de dados. Se esse tipo de visão unificadora é atraente, tente. A documentação é excelente e continua a ser activamente desenvolvida.
Duct
Duct is a leiningen template that approach building a web application as a set of configurations. Por exemplo, em ducto, roteamento é uma configuração. A migração é uma configuração. Usando esta abordagem unificadora e orientada a dados, você constrói uma aplicação web que pode ser recarregada deterministicamente. O quadro parece estar a ganhar força.
Tadam
Tadam configurou uma série de bibliotecas existentes e criou uma estrutura de diretórios padrão para tornar a escrita de sites simples muito fácil. Ainda é novo, mas ativo.
Coast on Clojure(GitHub)
Coast on Clojure gives you a full solution (database to serving HTML) while focusing on keeping things simple.Hoplon é uma solução fullstack com uma abordagem interessante. A parte frontend compila o ClojureScript e permite-lhe construir componentes interactivos que usam um modelo dataflow semelhante a uma folha de cálculo. Ele pode se conectar à infra-estrutura chamando funções que são proxies de funções no servidor. Isto permite contornar toda a situação de roteamento. O seu desenvolvimento é lento.
Não recomendado
estes quadros não são recomendados porque não foram desenvolvidos activamente durante muito tempo e nunca tiveram tracção suficiente. Não os avaliei com base em méritos técnicos porque não os recomendaria apenas com base no seu desenvolvimento inactivo.
- webnf
- Clojure em Bobinas
- joodoo
- Datsys
Não enquadramentos
Estes projetos são muitas vezes chamados de quadros, mas eles não atendem a definição de “proporcionar uma abordagem holística para a construção de uma aplicação web”. Não os avaliei aqui.