select一个Scala Web框架

我即将开始一个应该运行在Tomcat服务器上的Web应用程序的项目。 我决定去Scala–另一个我正在使用Groovy的替代scheme – 基本上是为了types安全。 我现在面临为工作select正确工具的任务。

我需要开发的项目只能通过JSON API访问。 它将与自己的数据库和两个外部服务交互,这两个服务分别公开一个JSON和XML API。 我还需要能够安排周期性的工作,我的应用程序将执行与这些外部服务的各种同步任务。

对于数据库,我希望能够在Scala中定义我的模型并自动生成模式。 如果有需要改变我的模型,我想有移民来处理它。

对于这个应用程序,我正在评估Lift,Play! 2和Scalatra。

  • 电梯是我的第一select。 这是三个项目中最成熟的,似乎被认为是高度安全的(我不想在安全上妥协)。 此外,它具有什么似乎是在斯卡拉最好的JSON处理库。 尽pipe如此,我不确定这是否是正确的select。 这个文档并不是我见过的最好的。 而且,Record + Squeryl似乎比Mapper更好的抽象,但是这个用法的文档更加稀缺。 最后,Lift虽然可以用来创buildWeb服务,但它的真正优势似乎在于处理状态,所以我不相信我的项目需要额外的复杂性。

  • 玩! 2似乎有一个更好的文档,看起来更熟悉(我来自Django的背景)。 同样,它的默认数据库抽象并不能使我安心:ANORM依赖于SQL,这对于types检查没有帮助。 无论如何,我将不得不使用Squeryl,我不确定这个用例的文档是否一样好。 而且,部署Play! 目前有2个应用程序比我想要的要复杂得多。 一个人必须安装Play! 在生产服务器上,我不知道这是我工作的一个选项。 否则,有一个插件可以使它与servlet容器一起工作,但它是非常新的,我不确定它是多么的稳定/可靠。

  • 最后还有使用Scalatra的选项。 Scalatra似乎很容易build立,它的devise正是为了创buildWeb服务。 妥协是Scalatra不提供太多的function。 它不与现有的ORM集成,也不build议如何组织应用程序的模型部分,也不能帮助devisecron或命令行任务。 我也不确定项目的长远未来。

你认为什么是我的任务的最佳select?

如果你是来自MVC背景,那么Play会感觉最熟悉。 电梯不是MVC,它需要一些时间来包裹你的头。

没有理由不能使用像Jersey,Spring MVC, Dropwizard ,Restlet,RESTEasy等基于Java的框架。或者你可以像使用Grails一样使用Java来使用Grails。 注 – Groovy从版本2.0开始就具有types安全性,因此需要考虑。

如果你正在考虑Scalatra,那么别忘了Spray , Unfiltered , BlueEyes …

请务必查看Matt Raible 对Web框架的全面比较 。 还有其他的SO问题: Rest API服务器的Scala框架? 如何使用Akka实现REST Web服务?

虽然你已经给了一些候选人,但是我推荐Tim Perrett(“行动起飞”一书的作者,他比较了scala webframeworks: http ://skillsmatter.com/podcast/scala/scalable-language-web