我正在研究轻量级的东西,至少应该支持以下功能:
我知道为这些选项中的每一个推出自己的微框架相对容易,但是如果像这样的东西已经存在,为什么重新发明轮子呢?特别是如果它是:
答案 0 :(得分:54)
首先,我认为你不太可能在Clojure中找到一个单独的收缩包解决方案(除了通过互操作使用的Java库的形式)。什么成为Clojure的标准Web堆栈包含许多库,人们可以通过各种方式进行混合和匹配(因为它们很乐意完全兼容)。 1
以下是您可能会觉得有用的一些构建块的列表:
Ring - Clojure的基本HTTP请求处理库;我知道的所有其他webby库(用于编写路由& c。)与Ring兼容。 Ring正在积极开发,拥有一个强大的社区,编写得非常好,并且有一个很好的SPEC文档,详细说明了它的设计理念。 This blog post提供了一个很好的例子,说明如何使用它(对GitHub提交做出反应)。
Sandbar - 目前是一个身份验证库,计划了更多类型的功能;正在开发中。
Compojure - 一个成熟而强大的库,它提供了一个很好的DSL,用于编写在Ring上使用的路由。这将为您提供良好的URL参数处理。
Compojure-rest - “用于在Compojure之上构建RESTful应用程序的库”。据我所知,在早期发展阶段,构成休息;或许您可能会将此视为影响其设计的机会。 : - )
为了处理XML,有clojure.contrib.lazy-xml
(以及帮助库clojure.contrib.zip-filter.xml
)和Enlive(内置clojure.xml
命名空间目前不是很有用);这些将被串联使用(虽然为了您的目的,前者可能就足够了)。
对于JSON,在contrib和clojure-json中有一个库(我认为至少还有一个其他的lib我现在似乎忘记了......);选择你最喜欢的那个。
所有人都会对REPL驱动的开发风格感到非常满意(请参阅this SO question的已接受答案,获取一个非常符合此目的的Ring技巧)。我想上面的链接集合确实留下了一些盲点(特别是,据我所知,身份验证故事仍在解决之中),但希望这是一个良好的开端。
1 我知道的唯一用于在Clojure中构建Web应用程序的单包解决方案是Conjure,受Rails的启发;不幸的是,我不得不承认我对此并不了解,所以如果您有兴趣,请点击链接并查看来源,wiki& c。
答案 1 :(得分:7)
在建立我的第一个Clojure休息服务时,我发现自己经常问同样的问题。 Clojure工具箱给了我很多帮助:http://www.clojure-toolbox.com/
答案 2 :(得分:1)
如果您正在寻找一些示例,现实世界的说明性代码来帮助您入门,那么您可以研究这个clojure-news-feed on github项目,该项目演示了如何使用compojure / ring实现非平凡的RESTful Web服务通过JMX包装SQL(postgresql或mysql)和NoSQL(cassandra),搜索(solr),缓存(redis),事件记录(kafka),连接池(c3po)和实时指标。
这篇关于Building a Scalable News Feed Web Service in Clojure的博客提供了很好的介绍。我在一个不起眼的AWS部署上针对此服务运行了一些负载测试,每秒大约有80个事务处理,每个事务的平均延迟时间不到半秒。
答案 3 :(得分:0)
看看解放者库http://clojure-liberator.github.io/liberator/这不是一个独立的解决方案,非常适合休息服务定义。
答案 4 :(得分:0)
为了提供这个旧问题的最新答案,目前(在2018年),我认为Luminus提供了一个很好的起点。它使用了之前答案中提到的许多库(ring,compojure等),它们是模块化的,并且与Clojure一样接近“单一包”。特别是对于REST,请查看compojure-api。 Luminus建议buddy进行身份验证,我在传统的基于会话的身份验证以及Oauth和无状态JWT方面都取得了很好的成功。