选择一个Scala Web框架

40

我即将开始一个需要在Tomcat服务器上运行的Web应用项目。在选择编程语言方面,由于需要类型安全性,我选择了Scala,而我工作的地方提供的另一种选择是Groovy。现在我面临的任务是选择适合这个项目的正确工具。

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

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

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

  • Lift 是我的首选。它是这三个项目中最成熟的,似乎被认为是高度安全的(我不想在安全性上妥协)。此外,它似乎是Scala中最好的JSON处理库。尽管如此,在浅尝辄止后,我不确定这是否是正确的选择。文档并不是我见过的最好的文档。此外,Record + Squeryl 对我来说是比Mapper更好的抽象,但是这种用法的文档却更加缺乏。最后,尽管Lift肯定可用于创建Web服务,但它似乎其真正的优势在于状态处理,因此我并不确定对于我的项目是否需要额外的复杂性。

  • Play! 2的文档更好,而且对我来说更熟悉(我有Django背景)。再者,它默认的数据库抽象并不能令我满意:ANORM依赖于SQL,这不利于类型检查。我必须使用Squeryl,但不确定这种用例的文档是否一样好。此外,部署Play! 2应用程序比我想象的要复杂。我们必须在生产服务器上安装Play!,但我不确定这在我工作的地方是否可行。否则,有一个插件可以使其与Servlet容器配合使用,但它非常新,我不确定它有多稳定/可靠。

  • 最后还有使用Scalatra的选项。Scalatra设置非常容易,并且专门设计用于创建Web服务。让步的是,Scalatra没有提供太多功能。它不与现有ORM集成或建议如何组织应用程序的模型部分,也不帮助设计cron或命令行任务。我也不确定该项目的长期未来。

你认为哪个选项对我的任务最好?


3
请在关闭投票时附带一条评论,以便我可以改进我的问题。请注意不要改变原意,使翻译易于理解,并尽量简练。 - Andrea
我会猜测:这是因为像这样的问题(这里有X、Y、Z——什么是最好的?)没有明确的参数,往往会得到主观和片面的答案。据我所知,你列出的所有框架都适用于JSON对话,数据库自动模式。或者可能还有其他原因。 - om-nom-nom
1
好的,我认为我给出了一些参数:良好的文档,只需要Web服务接口,需要能够调度任务,需要能够可靠地部署在Tomcat上,处理模式迁移。 - Andrea
12
在"爱的夏天"期间,问题被关闭时没有任何关于如何改进问题的评论,这有点令人恼火 :-/。详情请见http://blog.stackoverflow.com/2012/07/kicking-off-the-summer-of-love/。 - Andrea
2个回答

25

如果你有 MVC 的背景,那么 Play 会感觉最熟悉。Lift 不是 MVC,需要一些时间来理解。

使用 Scala 和基于 Java 的框架(如 Jersey、Spring MVC、Dropwizard、Restlet、RESTEasy 等)没有任何问题。或者你可以像使用 Java 一样在 Grails 中使用 Scala。注意 - Groovy 从版本 2.0 开始具有类型安全性,这是需要考虑的事情。

如果你正在考虑 Scalatra,那么不要忘记 SprayUnfilteredBlueEyes...

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


10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接