40

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

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

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

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

  • 电梯是我的第一选择。它是三个项目中最成熟的,并且似乎被认为是高度安全的(我不想在安全性上妥协)。此外,它还具有似乎是 Scala 中最好的 JSON 处理库。尽管如此,在涉足它之后,我不确定这是否是正确的选择。该文档并不是我见过的最好的。此外,在我看来,Record + Squeryl 似乎比 Mapper 更好,但这种用法的文档更加稀缺。最后,虽然 Lift 确实可以用于创建 Web 服务,但它的真正优势似乎在于状态处理,因此我不相信我的项目需要额外的复杂性。

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

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

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

4

2 回答 2

25

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

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

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

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

于 2012-08-01T12:30:58.083 回答
10

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

于 2012-08-01T09:27:00.060 回答