Зрелые веб-фреймворки Clojure?

Каков текущий выбор зрелых веб-фреймворков Clojure? Я ищу какую-то матрицу функций, рассказывающую мне, что и в какой степени поддерживают популярные фреймворки, в том числе:

  • Шаблон ответа (ответ, написанный на Clojure или в другой разметке, например, как JSP с плитками)
  • HTTP-сессии
  • REST с автоматическим отображением URL-адресов в функции-действия и параметры
  • HTML-формы (параметры доступны как карта, обработка ошибок, проверка)
  • Поток приложения (известный из фреймворков Java - обработчики запросов возвращают идентификаторы действий, которые в конечном итоге обрабатываются модулями визуализации)

person Konrad Garus    schedule 23.08.2010    source источник
comment
-1 за запрос HTTP-сеансов - платформа Play доказывает, что вам это не нужно   -  person Peter Hilton    schedule 31.10.2011


Ответы (5)


Возможно, мой ответ на вопрос Что является хорошей отправной точкой для разработки веб-службы RESTful в Clojure?, вопрос о SO может вам помочь. В нем упоминаются некоторые важные веб-библиотеки для Clojure (со ссылками и краткими резюме). Ключевой момент, который я хотел бы здесь повторить, изложен в первом абзаце этого ответа:

Во-первых, я думаю, что вы вряд ли найдете единственное решение в термоусадочной упаковке для выполнения всего этого в Clojure (кроме как в виде библиотеки Java, которая будет использоваться через взаимодействие). То, что становится стандартным веб-стеком Clojure, состоит из ряда библиотек, которые люди смешивают и сопоставляют всевозможными способами (поскольку они, к счастью, обычно идеально совместимы).

К этому я бы добавил, что вам, вероятно, не следует ожидать, что вы будете обрабатывать вещи с помощью своего рода «поток приложений», который вы могли бы знать по Java (или, если вы считаете, что вам это действительно нужно, вам, вероятно, придется свернуть свою собственную библиотеку для ее поддержки. !). Однако это нормально, поскольку люди, похоже, очень довольны подходом Ring, ориентированным на работу с обработчиком и ориентированным на промежуточное программное обеспечение более высокого порядка.


Чтобы устранить пули:


В качестве отправной точки в изучении веб-стека Clojure это кольцо учебник от автора Ring Марка МакГранагана очень полезен. Автор Compojure Джеймс Ривз имеет некоторая документация по Compojure. Возможно, мой недавний ответ на Что «большая идея», стоящая за маршрутами самообладания? тоже может помочь. Источники Ring также включают отличный документ SPEC.

person Michał Marczyk    schedule 23.08.2010
comment
Не могли бы вы немного рассказать о параметрах шаблонов и почему вы можете порекомендовать «перейти на java»? Это вопрос зрелости функциональности, производительности или чего-то еще? - person Rob Lachlan; 28.08.2010
comment
@ Роб Лахлан: Я бы не обязательно рекомендовал переходить на Java - я просто думаю, что это одна из задач, выполнение которой не обязательно приведет к ухудшению качества работы. Если вы структурируете свое приложение так, чтобы ваш шаблонизатор никогда не обращался к логике вашего приложения на этапе рендеринга, какая разница, если оно написано на Java / Scala или на чем-то еще? По крайней мере, до тех пор, пока существует разумный способ установки переменных шаблона (например, StringTemplate использует .setAttribute в шаблонах, что достаточно просто для использования с doseq и картой из Clojure). - person Michał Marczyk; 28.08.2010
comment
Это не значит, что нет причин отдавать предпочтение схемам шаблонов на чистом Clojure - я не уверен, что знаю что-нибудь вроде Enlive за пределами страны Clojure, например (но творить чудеса стоит время, так что, возможно, это не лучший вариант. подходящий выбор, когда что-то значительно более простое сработает отлично), Hiccup - отличный DSL для создания HTML (но есть ли смысл обучать дизайнера писать Hiccup, когда они уже знают другое решение JVM, к которому вы можете просто обратиться?) и т. д. . - person Michał Marczyk; 28.08.2010
comment
Я считаю, что в случае с этим конкретным ответом я просто подумал, что если OP используется для веб-разработки на Java, он вполне может быть полностью доволен тем механизмом создания шаблонов JVM, который он обычно использует. Кроме того, я не могу придумать прямого эквивалента StringTemplate в Clojure (и не вижу особых причин для его изобретения), и это, кажется, отличное решение для создания шаблонов HTML. - person Michał Marczyk; 28.08.2010
comment
Всем хорошего, спасибо. Это немного прояснило мне ситуацию - я пришел к выводу, что, по крайней мере, для моих личных проектов, я буду использовать прямую икоту. В конце концов, поскольку синтаксическая форма нашего языка изоморфна xml и html (или почти что), было бы стыдно не слишком использовать этот факт. - person Rob Lachlan; 29.08.2010
comment
Я создал структуру полного стека для Clojure: Coast on Clojure Он все еще молод, поэтому я оставил комментарий, а не ответ, так как он технически не зрел (все еще отсутствует в некоторых областях, где сияют другие фреймворки с полным стеком). Проверьте это и посмотрите, решит ли проблему! - person swlkr; 10.01.2018

Поскольку на этот вопрос изначально был задан / дан ответ, многообещающим решением стала веб-платформа Noir.

Он использует икоту для части создания шаблонов, но предлагает более полную структуру вокруг этого.

Базовый пример кода с главной страницы Нуара:

(ns my-app
  (:use noir.core)
  (:require [noir.server :as server]))

(defpage "/welcome" []
    "Welcome to Noir!")

(server/start 8080)
person mikera    schedule 28.11.2011
comment
Нуар устарел, но см. lib-noir - person Gordon Gustafson; 14.12.2015

Я рекомендую вам использовать Luminus не из-за его потрясающего названия, а из-за его особенностей.

А поскольку Noir больше не поддерживается, я не рекомендую вам его использовать. Это также хороший выбор, чтобы начать с ring & Compojure с самого начала, чтобы создать свой собственный фреймворк.

person crazy_phage    schedule 26.11.2013

Возможно, вы задаете неправильный вопрос. В вашем вопросе я вижу следующее: «Какой фреймворк Clojure больше всего похож на объектно-ориентированные фреймворки Java, к которым я привык?». На это нет хорошего ответа; если вы чувствуете себя комфортно только с подходом на стороне сервера (например, Grails или Tapestry), то, возможно, вам стоит остаться там и найти способ реализовать часть вашего бэкэнда на Clojure.

С другой стороны, если вы хотите создать что-то более близкое к Clojure, вы можете найти свой собственный микс. У меня были хорошие успехи с использованием AngularJS и CoffeeScript на клиенте и Clojure (с использованием Ring и Bishop) на сервере (хотя мы переходим от Bishop к Liberator). В любом случае, если вы примете подход «одностраничного» веб-приложения и начнете рассматривать серверную часть как источник и приемник данных, вы обнаружите, что Clojure работает исключительно хорошо.

person Howard M. Lewis Ship    schedule 03.01.2014

попробуйте дорожную среду для быстрой веб-разработки https://github.com/zhujinxian/road

(defn render-test [ret tmt]
  (-> (resp/response "------render----test------") 
    (#(resp/content-type %1 "text/plain"))))

(defn foo
  "I don't do a whole lot."
  [x]
  (str "来自源码目录的参数:" x))

(defn handler [^Integer x]
    {:$r render-test :text (str "hello world, road goes sucess!" (foo x))})

(defn home [req content ^Integer num]
    {:hiccup "home.clj" :content (str "home" content) :num num})

(defroad road (GET "/web-test-0.1.0-SNAPSHOT-standalone/main" handler) 
              (GET "/web-test-0.1.0-SNAPSHOT-standalone/home/:num{\\d+}" home))

(defn -main [& args]
  (log/info "---------log4j test-------")
  (jetty/run-jetty road {:port 3000}))
person ainixian2004    schedule 08.03.2015