Я полагаю, что это странный вопрос для огромного большинства программистов, ежедневно работающих с Java. Я не. Я знаю Java-язык, потому что я работал над проектами Java, но не Java-the-world. Я никогда не делал веб-приложение с нуля на Java. Если мне нужно сделать это с Python, Ruby, я знаю, куда идти (Django или Rails), но если я хочу создать веб-приложение на Clojure, не потому, что я вынужден жить в мире Java, а потому, что я как язык, и я хочу попробовать, какие библиотеки и фреймворки мне следует использовать?
216
Ответы:
Безусловно, лучший веб-фреймворк Clojure, с которым я когда-либо сталкивался, это Compojure: http://github.com/weavejester/compojure/tree/master.
Он небольшой, но мощный и имеет красивый элегантный синтаксис. (Он использует Jetty под капотом, но он скрывает от вас Servlet API, если вы этого не хотите, что будет не часто). Посмотрите на README по этому URL, затем загрузите снимок и начните играть.
источник
Compojure больше не является полноценной платформой для разработки веб-приложений. Начиная с версии 0.4, compojure был разбит на несколько проектов.
Кольцо обеспечивает основу, абстрагируя процесс HTTP-запроса и ответа. Ring проанализирует входящий запрос и сгенерирует карту, содержащую все части запроса, такие как uri, server-name и request-method. Затем приложение будет обрабатывать запрос и на основании запроса генерировать ответ. Ответ представляется в виде карты, содержащей следующие ключи: статус, заголовки и тело. Таким образом, простое приложение будет выглядеть так:
Еще одна часть Кольца - концепция промежуточного программного обеспечения. Это код, который находится между обработчиком и входящим запросом и / или исходящим ответом. Некоторые встроенные промежуточные программы включают сессии и трассировку стека. Промежуточное программное обеспечение сеанса добавит: ключ сеанса к карте запроса, которая содержит всю информацию о сеансе для пользователя, выполняющего запрос. Если ключ: сеанс присутствует в карте ответов, он будет сохранен для следующего запроса, сделанного текущим пользователем. Промежуточное программное обеспечение трассировки стека будет фиксировать любые исключения, возникающие при обработке запроса, и генерирует трассировку стека, которая отправляется обратно в качестве ответа, если какие-либо исключения возникают.
Работа непосредственно с Ring может быть утомительной, поэтому Compojure построен поверх Ring, абстрагируя детали. Теперь приложение можно выразить в терминах маршрутизации, чтобы вы могли получить что-то вроде этого:
Compojure по-прежнему работает с картами запросов / ответов, поэтому вы всегда можете получить к ним доступ при необходимости:
В этом случае часть {uri: uri} обращается к ключу: uri в карте запросов и устанавливает для uri это значение.
Последний компонент - Hiccup, который облегчает генерацию HTML. Различные HTML-теги представлены в виде векторов, причем первый элемент представляет имя тега, а остальные - тело тега.
"<h2>A header</h2>"
становится[:h2 "A Header"]
. Атрибуты тега находятся на дополнительной карте."<a href='/login'>Log In Page</a>"
становится[:a {:href "/login"} "Log In Page"]
. Вот небольшой пример использования шаблона для генерации HTML.Вот ссылка на черновик некоторой документации, которая в настоящее время пишется автором compojure, которая может оказаться вам полезной: Compojure Doc
источник
Также есть «Noir» ( http://www.webnoir.org/ ), который представляет собой новый веб-фреймворк Clojure (так что новых документов еще нет). Исходя из Django / Rails, я копаю простой, прямой синтаксис, и он довольно скудный.
источник
Рассмотрим веб-фреймворк Luminus . Я не имею отношения, но слышал хорошие вещи от друзей, которых я уважаю.
источник
Моя текущая веб-библиотека go-to теперь yada .
Если вы только начинаете, вводный сервер есть
Compojure
. Я вижу это какapache
веб-серверы в мире Clojure (в этом случае yada / aleph будет nginx). Вы можете использоватьLuminus
в качестве шаблона. Есть варианты этого, какcompojure-api
.Я попробовал ou
Pedestal
и был глобально удовлетворен этим. Я не претендую на то, что справляюсь с этим, но у него приятный синтаксис, он очень сплоченный и выглядит так, как будто имеет отличную производительность. Он также поддерживаетсяCognitect
( компанией Clojure / Datomic, где работает Rich Hickey).Я нашел
Aleph
интересную абстракцию, а встроенное противодавление кажется интересным. Я еще не играл с ним, но он определенно в моем списке.Немного поиграв с различными веб-серверами, вот мой быстрый список за и против:
Краткий ответ: взгляните на Luminus чтобы быстро начать, возможно, перейдите к чему-то другому, когда ваши потребности изменятся (возможно, Яда).
Compojure
Плюсы (1):
Минусы (2):
пьедестал
Плюсы (3):
Минусы (4):
Алеф
Pro (3):
Минусы (1):
Яда
Pro (3):
Минусы (1):
HttpKit
Pro (2):
Минусы (2):
Nginx-Clojure
Примечание: я не играл с ним, в основном из-за отсутствия документации. Это выглядит интересно, и очень производительно.
Плюсы (2):
Минусы (1):
Immutant
Примечание: я не играл с этим.
Плюсы:
Минусы:
Catacumba
Примечание: я не играл с ним, хотя документация выглядит превосходно. Я, вероятно, собираюсь попробовать это дальше. Есть примеры проектов чата, которые выглядят интересными, их интенсивное использование протоколов поначалу оттолкнуло меня, как начинающего разработчика Clojure.
Плюсы (6):
Минусы (2):
Примечание : доступен эталонный тест веб-серверов Clojure , если важна только производительность.
источник
В наши дни пьедестал - это каркас, на который стоит обратить внимание. Это серверная структура, которая построена поверх Ring , но также освобождает входящий запрос от исходного потока, имея возможность приостановить и возобновить этот конкретный запрос (в противном случае медленный запрос фактически блокирует эту нить сервера). Может быть, вроде как JavaBean.
Другие классные фреймворки - это hoplon.io и Om Дэвида Нолена (на основе React)
источник
Webjure , платформа веб-программирования для Clojure.
Особенности: Диспетчерские вызовы сервлета Функции Clojure. Динамическая генерация HTML. Интерфейс SQL-запросов (через JDBC).
Этот ответ предназначен для заполнения информации Webjure.
источник
Compojure - это то, что я использовал для создания крошечного блогового приложения. Он создан по образцу Sinatra, минимального и легкого веб-фреймворка для Ruby. Я в основном только использовал маршрутизацию, которая такая же, как у Синатры. Это выглядит как:
Там нет ORM или библиотеки шаблонов, но у нее есть функции, которые превращают векторы в HTML.
источник
Вы также можете взглянуть на эти рамки (взятые из Disclojure / проектов ):
Есть еще один связанный с этим вопрос о переполнении стека: зрелые веб-фреймворки Clojure?
источник
Отказ от ответственности: я автор.
Я собрал шаблон leiningen, который сочетает шаблоны luminusweb и каштана. Таким образом, вы получаете что-то, с помощью чего вы можете создать код clojure и код clojurescript для front и backend.
Кроме того, он обеспечивает управление пользователями, а также простую генерацию CRUD и еще несколько небольших приятных вещей: https://github.com/sveri/closp
источник
Я добавлю два цента для Duct , также от @weavejester , хранителя Compojure и Ring.
По своей сути он объединяет Компонент и Кольцевой маршрутизатор под одной крышей. Причины, по которым я использую воздуховод:
Основные характеристики:
Примечание: само собой разумеется, но в интересах новичков в веб-разработке, как и большинство вещей Clojurey, Duct требует твердого понимания языка Clojure. Я также рекомендую сначала прочитать о Компоненте.
С другой стороны, я уже более года использую Duct в нескольких производственных приложениях и очень доволен этим.
источник
вы также можете попробовать Clojure на катушках, http://github.com/zubairq/coils - отказ от ответственности: я автор
источник
Еще один интересный веб-сервер - Http-kit . Он имеет хорошую производительность и совместим с кольцами, а также поддерживает WebSockets. Это сделано главным образом в clojure, и не хватает некоторых странных вещей в Jetty / Tomcat.
С ним легко повозиться.
источник
Reframe и om.next, вероятно, то, что вы ищете.
источник
Arachne - это веб-фреймворк для новичков. Цитирую описание сайта:
У него есть кампания на кикстартере, в которой утверждается, что он предлагает «начать работу», аналогичный Rails. Он разработан Cognitect.
Вот хорошая дискуссия об этом с автором Luminus (yogthos).
источник
Я уже давно успешно использую Liberator в производстве. Это отличный фреймворк, если вы хотите просто обнажиться, например, если вы создаете веб-сервис RESTful или что-то подобное. По сути, это оболочка для звонка и compojure и предоставляет график решений при проверке входящих запросов. Это также чрезвычайно быстро по сравнению с другими более громоздкими веб-фреймворками. Если вы хотите начать где-то быстро и медленно, то Liberator - отличный выбор.
источник