选择Scala Web框架

And*_*rea 40 scala lift playframework 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或命令行任务.我也不确定该项目的长期未来.

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

sou*_*ica 25

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

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

如果你正在考虑了Scalatra那么不要忘记喷涂,未经过滤,BlueEyes ...

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


And*_*ert 10

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