选择Scala Web框架

时间:2012-08-01 09:22:00

标签: scala playframework lift scalatra

我即将为一个应该在Tomcat服务器上运行的Web应用程序启动一个项目。我决定去Scala - 我工作的另一个替代方案是Groovy - 主要是为了类型安全。我现在面临着为工作选择合适工具的任务。

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

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

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

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

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

  • 最后,您可以选择使用 Scalatra 。 Scalatra似乎很容易设置,它的设计完全是为了创建Web服务。折衷方案是Scalatra不提供太多功能。它不与现有ORM集成或建议如何组织应用程序的模型部分,它无助于设计cron或命令行任务。我也不确定该项目的长期未来。

您认为什么是我的任务的最佳选择?

2 个答案:

答案 0 :(得分:25)

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

没有理由不能将Scala与基于Java的框架一起使用,如Jersey,Spring MVC,Dropwizard,Restlet,RESTEasy等。或者你可以像使用Grails一样使用Scala和Grails Java与Grails。注 - Groovy从版本2.0开始具有类型安全性,因此需要考虑。

如果您正在考虑Scalatra,请不要忘记SprayUnfilteredBlueEyes ......

请务必查看Matt Raible的comprehensive comparison of web frameworks。而这些其他SO问题: Scala framework for a Rest API Server?How to implement a REST Web Service using Akka?

答案 1 :(得分:10)

虽然你已经给了一些候选人,但我向你推荐Tim Perrett(Lift in Action的作者),他在其中比较了scala webframeworks:  http://skillsmatter.com/podcast/scala/scalable-language-web