选择Scala web框架



我将为一个应该在Tomcat服务器上运行的web应用程序启动一个项目。我决定选择Scala——我工作的另一种选择是Groovy——本质上是为了类型安全。我现在面临的任务是为这份工作选择合适的工具。

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

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

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

  • 电梯是我的第一选择。它是三个项目中最成熟的,似乎被认为是高度安全的(我不想在安全性上妥协)。此外,它还提供了Scala中最好的JSON处理库。尽管如此,在尝试了一点之后,我不确定这是否是正确的选择。这份文件并不是我见过的最好的。此外,在我看来,Record+Squeryl是一个比Mapper更好的抽象,但用于此用途的文档更为稀少。最后,尽管Lift当然可以用于创建web服务,但它的真正优势似乎在于状态处理,因此我不相信我的项目需要额外的复杂性。

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

  • 最后,还可以选择使用Scalatra。Scalatra似乎很容易设置,而且它的设计正是为了创建web服务。折衷方案是Scalatra不提供太多功能。它不与现有的ORM集成,也不建议如何组织应用程序的模型部分,而且它对设计cron或命令行任务没有帮助。我也不确定这个项目的长期前景。

你认为对我的任务来说什么是最好的选择?

如果你来自MVC背景,那么Play将是最熟悉的。Lift不是MVC,它需要一些时间来理解它。

没有理由不能将Scala与基于Java的框架(如Jersey、Spring MVC、Dropwizard、Restlet、RESTEasy等)结合使用。或者,您可以将Scala和Grails结合使用,就像将Java和Grails一起使用一样。注意,Groovy从2.0版本开始就具有类型安全性,所以这是需要考虑的问题。

如果你正在考虑Scalatra,那么不要忘记喷雾、未过滤、蓝眼睛。。。

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

尽管你已经给出了一些候选人,但我向你推荐Tim Perrett(Lift in Action的作者,他在演讲中比较了scala-webframework:http://skillsmatter.com/podcast/scala/scalable-language-web

最新更新