我是玩框架的新手。我的要求很简单。我想使用 play 框架在 scala 中创建 rest api 服务器。我可以使用 play2-mini,但它似乎已经过时了。
我希望在我的项目中使用 play 2.1。我只需要核心模块,而不是将播放框架设置为依赖项。所以我有几个问题-
- Play 的核心模块是什么?什么是模块名称?
- 使用核心模块创建异步http服务器是否足够?
- 这个链接说我可以使用核心模块而不是 play-mini。如果是真的,我在哪里可以获得更多关于它的信息。
我是玩框架的新手。我的要求很简单。我想使用 play 框架在 scala 中创建 rest api 服务器。我可以使用 play2-mini,但它似乎已经过时了。
我希望在我的项目中使用 play 2.1。我只需要核心模块,而不是将播放框架设置为依赖项。所以我有几个问题-
Play Framework 是一个高度模块化的项目。在内部,它由大约 20 个子项目组成。如果需要,您可以将其中一些作为库依赖项包含在项目中,例如anorm
或jdbc
. 其他项目(即PlayExceptions
、RoutesCompiler
等TemplatesCompiler
)对于任何 Play 应用程序都是必不可少的,因此您无需声明对它们的依赖。这些项目可以称为 Play Framework 的“核心”。
换句话说,如果您需要一个具有最少依赖项的 Play 应用程序,请不要声明您不需要的依赖项。
您可以简单地设置一个路由,然后将其指向一个解析您发送的数据的控制器。这是一个 json 解析和播放响应的示例。
http://www.playframework.com/documentation/2.1.1/ScalaJsonRequests
package controllers
import play.api._
import play.api.mvc._
import play.api.libs.json._
// you need this import to have combinators
import play.api.libs.functional.syntax._
object Application extends Controller {
implicit val rds = (
(__ \ 'name).read[String] and
(__ \ 'age).read[Long]
) tupled
def sayHello = Action { request =>
request.body.asJson.map { json =>
json.validate[(String, Long)].map{
case (name, age) => Ok("Hello " + name + ", you're "+age)
}.recoverTotal{
e => BadRequest("Detected error:"+ JsError.toFlatJson(e))
}
}.getOrElse {
BadRequest("Expecting Json data")
}
}
}
甚至更简单...
def sayHello = Action(parse.json) { request =>
request.body.validate[(String, Long)].map{
case (name, age) => Ok("Hello " + name + ", you're "+age)
}.recoverTotal{
e => BadRequest("Detected error:"+ JsError.toFlatJson(e))
}
}
我认为这里没有太大问题。例如,这是我的 build.sbt 用于一个非常小的项目,它使用 json,我想在其中使用 Play 库,但不一定要创建完整的 Play 应用程序:
name := "my-small-project"
version := "0.0.1-SNAPSHOT"
resolvers ++= Seq(
"TypeSafe Repo" at "http://repo.typesafe.com/typesafe/releases",
"Sonatype Repo" at "http://oss.sonatype.org/content/repositories/releases"
)
libraryDependencies ++= Seq(
"org.specs2" %% "specs2" % "2.3.7" % "test",
"commons-codec" % "commons-codec" % "1.8",
"com.typesafe.play" % "play_2.10" % "2.2.1",
"com.typesafe.play" % "play-json_2.10" % "2.2.1"
)
而且您仍然可以在这里删除一些依赖项,特别是如果您不需要 Base64 编码。在这里,我将 play_2.10 视为您感兴趣的“核心”。尽管您应该熟悉sbt,但这并不难。
还要记住,“Play 应用程序”和“使用 Play 库的应用程序”之间的区别非常模糊,尤其是在使用 sbt 时。这就是它的美妙之处,它展示了 Play 创作者如何通过为要构建的项目创建自定义系统要求来深思熟虑地尝试不再发明轮子。例如,您可以输入 Play 应用程序目录并键入“sbt compile”,而不是触发 Play 控制台,它应该可以正常工作。