【问题标题】:Play 2.1 for Http Server玩 2.1 for Http Server
【发布时间】:2013-06-19 13:58:31
【问题描述】:

我是新手玩框架。我的要求很简单。我想使用 play 框架在 scala 中创建 rest api 服务器。我可以使用 play2-mini,但它似乎已经过时了。

我希望在我的项目中使用 play 2.1。我只需要核心模块,而不是将播放框架设置为依赖项。所以我有几个问题 -

  1. 什么是Play的核心模块?什么是模块名称?
  2. 使用核心模块创建异步http服务器是否足够?
  3. This link 说我可以使用核心模块而不是 play-mini。如果属实,我可以从哪里获得有关它的更多信息。

【问题讨论】:

    标签: api scala playframework playframework-2.1


    【解决方案1】:

    您可以简单地设置一个路由,然后将其指向一个解析您发送的数据的控制器。下面是一个 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))
        }
      }
    

    【讨论】:

    • 谢谢,但我不想创建播放应用程序,而是希望尽可能将播放用作库并在我的应用程序中启动 http 服务器。
    • @pankajmi 我不认为你在寻找什么是可能的。
    • 感谢您的回复,我有一个场景,我不应该对当前项目结构进行大量更改,所以我必须使用 scalatra 或未过滤。
    【解决方案2】:

    Play Framework 是一个高度模块化的项目。在内部,它由大约 20 个子项目组成。如果需要,可以将其中一些作为库依赖项包含在项目中,例如 anormjdbc。其他项目(即PlayExceptionsRoutesCompilerTemplatesCompiler 等)对于任何 Play 应用程序都是必不可少的,因此您无需声明对它们的依赖。这些项目可以称为 Play Framework 的“核心”。

    换句话说,如果您需要一个具有最少依赖项的 Play 应用程序,请不要声明您不需要的依赖项。

    播放源:https://github.com/playframework/Play20

    【讨论】:

    • 但这需要我的应用程序作为播放应用程序..对吗?我想要的是让我的应用程序保持原样,并将播放框架中的 http 服务器添加为库。
    【解决方案3】:

    我认为这里没有什么问题。例如,这是我的 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 控制台,它应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 2012-12-18
      • 1970-01-01
      相关资源
      最近更新 更多