Scalatra:一个类似Sinatra的Scala Web框架

Scalatra 概述

Scalatra 是一个基于 Scala 的 Web 框架,遵循了 Ruby 的 Sinatra 框架的设计原则。它最初被称为 Step,后来更名为 Scalatra。LinkedIn Signal 的 RESTful 后端就是基于 Scalatra 构建的。

核心特性

Scalatra 类似于其他 Sinatra 风格的 Web 框架,开发者通过定义路由和相应的处理代码来构建应用。以下是一些关键特性:

  • 路由匹配:开发者可以通过简单的 DSL 定义路由和处理逻辑。
  • 会话管理:支持设置和获取会话变量。
  • 内容类型控制:可以轻松设置响应的内容类型,如 HTML、PDF 等。
  • 重定向:支持请求重定向。
  • 404 处理:可以自定义 404 错误响应。

代码示例

以下是一个典型的 Scalatra 应用示例:

package org.scalatra

class ScalatraExample extends ScalatraServlet {

  before {
    contentType = "text/html"
  }

  get("/date/:year/:month/:day") {
    <ul>
      <li>Year: {params("year")}</li>
      <li>Month: {params("month")}</li>
      <li>Day: {params("day")}</li>
    </ul>
  }

  get("/form") {
    <form action='/post' method='POST'>
      Post something: <input name='submission' type='text'/>
      <input type='submit'/>
    </form>
  }

  post("/post") {
    <h1>You posted: {params("submission")}</h1>
  }

  get("/") {
    <h1>Hello world!</h1>
  }

  get("/see_ya") {
    redirect("http://google.com")
  }

  get("/set/:session_val") {
    session("val") = params("session_val")
    <h1>Session var set</h1>
  }

  get("/see") {
    session("val") match {
      case Some(v:String) => v
      case _ => "No session var set"
    }
  }

  get("/report.pdf") {
    contentType = "application/pdf"
    val pdf = generatePdf()
    pdf.toBytes
  }

  notFound {
    response.setStatus(404)
    "Not found"
  }
}

开发者访谈

Scalatra 的联合创始人 Ross Baker 在接受 InfoQ 采访时,分享了他对 Scalatra 的看法:

  • Sinatra 的吸引力:Sinatra 框架家族因其简洁性而受到欢迎,开发者可以快速上手。
  • 选择 Scala 的原因:Scala 结合了函数式编程的优雅和 Java 的丰富库支持,是一个理想的选择。
  • 与其他 Scala 框架的对比:Lift 框架虽然强大,但其对会话状态的依赖和 HTTP 的隐藏与 Scalatra 的设计理念不同。Scalatra 更适合构建 RESTful 应用。
  • 应用架构:Scalatra 允许开发者在一个类中编写整个应用,适合快速原型开发,也支持逐步演进为更复杂的架构。
  • 迁移策略:对于从 Java 框架迁移到 Scalatra 的团队,建议逐步迁移,利用 Scala 和 Java 的双向互操作性。
  • 应用案例:除了 LinkedIn,ChaCha 等公司也在使用 Scalatra 构建内部 API 和管理应用。Scalatra 特别适合构建 RESTful API。

未来计划

Scalatra 的近期计划包括:

  • 支持 Comet。
  • 将 DSL 与 Servlet/Filter 分离,以便更容易使用 JRebel 进行热加载。
  • 构建官方网站。
  • 支持 OSGi、嵌套路由和增强的路由匹配选项。

获取与许可

Scalatra 是免费使用的,可以通过其官方网站下载。更多关于 Scala 和 Web 框架的信息可以在 InfoQ 上找到。

阅读 9
0 条评论