Suponho que essa seja uma pergunta estranha para a grande maioria dos programadores que trabalham diariamente com Java. Eu não. Conheço Java, a linguagem, porque trabalhei em projetos Java, mas não em Java, o mundo. Eu nunca criei um aplicativo Web do zero em Java. Se eu tiver que fazer isso com Python, Ruby, eu sei para onde ir (Django ou Rails), mas se eu quiser criar um aplicativo da Web no Clojure, não porque sou forçado a viver em um mundo Java, mas porque eu como a linguagem e eu quero experimentá-lo, quais bibliotecas e estruturas devo usar?
216
Respostas:
De longe, o melhor framework da Web Clojure que eu já encontrei é o Compojure: http://github.com/weavejester/compojure/tree/master
É pequeno, mas poderoso e possui uma sintaxe lindamente elegante. (Ele usa o Jetty sob o capô, mas oculta a API do Servlet, a menos que você queira, o que não será frequente). Vá para o LEIA-ME no URL, faça o download de um instantâneo e comece a jogar.
fonte
O Compojure não é mais uma estrutura completa para o desenvolvimento de aplicativos da web. Desde o lançamento do 0.4, o compojure foi dividido em vários projetos.
O Ring fornece a base abstraindo o processo de solicitação e resposta HTTP. O Ring analisará a solicitação recebida e gerará um mapa contendo todas as partes da solicitação, como uri, server-name e request-method. O aplicativo manipulará a solicitação e, com base na solicitação, gerará uma resposta. Uma resposta é representada como um mapa que contém as seguintes chaves: status, cabeçalhos e corpo. Portanto, um aplicativo simples se pareceria com:
Uma outra parte do Ring é o conceito de middleware. Este é o código que fica entre o manipulador e a solicitação de entrada e / ou a resposta de saída. Alguns embutidos no middleware incluem sessões e stacktrace. O middleware da sessão adicionará uma chave: session ao mapa da solicitação que contém todas as informações da sessão para o usuário que está fazendo a solicitação. Se a chave: session estiver presente no mapa de resposta, ela será armazenada para a próxima solicitação feita pelo usuário atual. Enquanto o middleware do rastreio da pilha captura todas as exceções que ocorrem durante o processamento da solicitação e gera um rastreio da pilha que é enviado de volta como resposta, se ocorrer alguma exceção.
Trabalhar diretamente com o Ring pode ser entediante, então o Compojure é construído sobre o Ring, abstraindo os detalhes. O aplicativo agora pode ser expresso em termos de roteamento, para que você possa ter algo assim:
O Compojure ainda está trabalhando com os mapas de solicitação / resposta para que você sempre possa acessá-los, se necessário:
Nesse caso, a parte {uri: uri} acessa a chave: uri no mapa de solicitação e define uri para esse valor.
O último componente é o Hiccup, que facilita a geração do html. As várias tags html são representadas como vetores, com o primeiro elemento representando o nome da tag e o restante sendo o corpo da tag.
"<h2>A header</h2>"
torna-se[:h2 "A Header"]
. Os atributos de uma tag estão em um mapa opcional."<a href='/login'>Log In Page</a>"
torna-se[:a {:href "/login"} "Log In Page"]
. Aqui está um pequeno exemplo usando um modelo para gerar o html.Aqui está um link para um rascunho de alguma documentação atualmente sendo escrita pelo autor do compojure que você pode achar útil: Documento Compojure
fonte
Há também o "Noir" ( http://www.webnoir.org/ ), que é uma nova estrutura da Web Clojure (portanto, os documentos ainda não estão lá). Vindo do Django / Rails, eu gosto da sintaxe simples e direta e é bem enxuta.
fonte
Considere a estrutura da web Luminus . Não tenho afiliação, mas ouvi coisas boas de amigos que respeito.
fonte
Agora, minha biblioteca da web go-to atual é yada .
Se você está apenas começando, o servidor introdutório é
Compojure
. Eu o vejo como oapache
dos servidores da Web no mundo Clojure (nesse caso, yada / aleph seria nginx). Você pode usarLuminus
como modelo. Existem variantes, comocompojure-api
.Eu tentei ou
Pedestal
estava globalmente satisfeito com isso. Não pretendo dominá-lo, mas tem uma sintaxe agradável, parece muito coesa e parece ter um ótimo desempenho. Também é apoiado pelaCognitect
(empresa Clojure / Datomic onde Rich Hickey trabalha).Descobri
Aleph
apresentar uma abstração interessante, e a contrapressão interna parece interessante. Ainda tenho que brincar com isso, mas definitivamente está na minha lista.Depois de jogar um pouco com vários servidores da web, aqui está minha rápida lista de Pro / Contras:
Resposta curta: dê uma olhada no Luminus para começar rapidamente, talvez mude para outra coisa à medida que suas necessidades evoluem (talvez Yada).
Compojure
Prós (1):
Contras (2):
Pedestal
Prós (3):
Contras (4):
Aleph
Pro (3):
Contras (1):
Yada
Pro (3):
Contras (1):
HttpKit
Pro (2):
Contras (2):
Nginx-Clojure
Nota: Eu não brinquei com isso, principalmente por causa da falta de documentação. Parece interessante e muito bem-sucedido.
Prós (2):
Contras (1):
Imutante
Nota: Eu não brinquei com isso.
Prós:
Contras:
Catacumba
Nota: Eu não brinquei com ele, embora a documentação pareça excelente. Provavelmente vou tentar a seguir. Existem exemplos de projetos de bate-papo que parecem interessantes, seu uso pesado de protocolos me deixou inicialmente como um desenvolvedor novato do Clojure.
Prós (6):
Contras (2):
Nota : uma referência dos servidores da Web Clojure está disponível, se o desempenho bruto for o que importa.
fonte
Atualmente, o Pedestal é uma estrutura que vale a pena dar uma olhada. É uma estrutura do lado do servidor que se baseia no Ring , mas também libera a solicitação recebida do encadeamento inicial, podendo pausar e retomar essa solicitação específica (caso contrário, uma solicitação lenta realmente bloqueia essa passagem do servidor). Talvez como um JavaBean.
Outras estruturas legais são hoplon.io e Om de David Nolen (baseado em React)
fonte
Webjure , uma estrutura de programação web para Clojure.
Recursos: O servlet de despacho chama as funções Clojure. Geração dinâmica de HTML. Interface de consulta SQL (através do JDBC).
Esta resposta pretende ser um espaço reservado para informações da Webjure.
fonte
Compojure é o que eu costumava criar um pequeno aplicativo de blog. Ele é modelado no Sinatra, que é uma estrutura da Web mínima e leve para Ruby. Eu principalmente apenas usei o roteamento, que é como o de Sinatra. Parece que:
Não há ORM ou biblioteca de modelos, mas possui funções que transformam vetores em HTML.
fonte
Você também pode ver estas estruturas (extraídas de disclojure / projects ):
Há também mais uma pergunta relacionada aos Stack Overflow: frameworks da web Mature Clojure?
fonte
Disclaimer: Eu sou o autor.
Montei um modelo de leiningen que combina modelos luminusweb e castanha. Assim, você obtém algo com o qual pode criar código clojure e código clojurescript para front-end e back-end.
Além disso, ele fornece gerenciamento de usuários, além de uma geração simples de CRUD e um pouco mais agradável de ter: https://github.com/sveri/closp
fonte
Vou jogar meus dois centavos por Duct , também de @weavejester , mantenedor de Compojure e Ring.
No seu núcleo, ele traz o Component e o roteador Ring sob o mesmo teto. Razões pelas quais eu uso o Duct:
Principais características:
Nota: Escusado será dizer, mas para o benefício dos recém-chegados ao desenvolvimento da Web, como a maioria das coisas Clojurey, o Duct exige uma compreensão sólida da linguagem Clojure. Também recomendo ler primeiro sobre o Componente.
Em outra nota pessoal, eu uso o Duct em várias aplicações de produção há mais de um ano e estou extremamente feliz com isso.
fonte
você também pode experimentar o Clojure on Coils, http://github.com/zubairq/coils - isenção de responsabilidade: eu sou o autor
fonte
Outro servidor web interessante é o Http-kit . Ele tem bom desempenho e é compatível com anel, além de ter suporte para WebSockets. É feito principalmente em clojure, e não possui algumas das coisas estranhas no Jetty / Tomcat.
É fácil mexer.
fonte
Renomeie e om.next provavelmente o que você está procurando.
fonte
Arachne é um framework web para iniciantes. Citando a descrição do site:
Ele tem uma campanha Kickstarter reivindicando oferecer uma experiência de "introdução" semelhante ao Rails. É desenvolvido por um Cognitect.
Aqui está uma boa discussão sobre isso com o autor de Luminus (iogues).
fonte
Estou usando o Liberator com sucesso na produção há um tempo. É uma excelente estrutura se você quiser apenas os ossos, por exemplo, se estiver criando um serviço da Web RESTful ou algo semelhante. É essencialmente um invólucro para anel e compojura e fornece um gráfico de decisão ao validar solicitações recebidas. Também é extremamente rápido em comparação com outros frameworks da web mais volumosos. Se você quer começar em algum lugar rápido e construir lentamente, o Liberator é uma ótima opção.
fonte