Прежде всего, я думаю, что вы вряд ли найдете единственное сжатое решение, чтобы сделать все это в Clojure (кроме как в форме библиотеки Java, которая будет использоваться через взаимодействие). То, что становится стандартным веб-стеком Clojure, включает в себя несколько библиотек, которые люди смешивают и сопоставляют всевозможными способами (так как они, к счастью, стремятся быть полностью совместимыми).
Вот список некоторых строительных блоков, которые могут оказаться полезными:
Ring - Базовая библиотека обработки запросов HTTP Clojure; все остальные библиотеки webby (для написания маршрутов и т. д.), о которых я знаю, совместимы с Ring. Ring активно развивается, имеет сильное сообщество, очень хорошо написано и имеет хороший документ SPEC, подробно описывающий его философию дизайна. В этом блоге приведен хороший пример того, как его можно использовать (реагирование на коммиты GitHub).
Sandbar - в настоящее время библиотека аутентификации, планируется больше типов функциональности; в стадии разработки.
Compojure - зрелая и надежная библиотека, которая предоставляет хороший DSL для написания маршрутов, которые будут использоваться поверх Ring. Это даст вам хорошую обработку параметров URL.
Compojure-rest - "библиотека для создания приложений RESTful поверх Compojure ". Compojure-отдых, насколько я могу судить, находится на ранних стадиях своего развития; возможно, вы могли бы увидеть это как возможность повлиять на его дизайн. : -)
Для работы с XML есть clojure.contrib.lazy-xml
(и вспомогательная библиотека clojure.contrib.zip-filter.xml
) и Enlive (встроенное пространство имен clojure.xml
в настоящее время не очень удобно); они будут использоваться в тандеме (хотя для ваших целей может быть достаточно первого).
Для JSON есть библиотека в contrib и clojure-json (а я думаю была по крайней мере еще одна библиотека, о которой я сейчас забываю ... ); выберите тот, который вам больше нравится.
Все будут очень довольны стилем разработки, основанным на REPL (см. Принятый ответ на этот вопрос SO для трюка Ring, который очень важен для этой цели). Я полагаю, что вышеупомянутая коллекция ссылок оставляет несколько слепых зон (в частности, насколько я могу судить, история аутентификации все еще прорабатывается), но, надеюсь, это хорошее начало.
1 Единственное решение из одного пакета для создания веб-приложений в Clojure, о котором я знаю, это Conjure , навеянное Rails; к сожалению, я должен признать, что я мало что знаю об этом, поэтому, если вам интересно, перейдите по ссылке и посмотрите источники, вики и т.