基于akka-http搭建restfull框架
1.scala开发环境介绍
2.scala插件的demo模板介绍
3.akka-http提供demo研究
4.添加路由机制解析
package org.netsharp.rest import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.model.{ContentTypes, HttpEntity} import akka.http.scaladsl.server.Directives._ import akka.stream.ActorMaterializer import scala.io.StdIn object WebServer { def main(args:Array[String]):Unit={ implicit val system = ActorSystem("netsharp") implicit val materializer = ActorMaterializer() implicit val executionContext = system.dispatcher val userRoute = path("user"){ get{ complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, "<h1>Say user to akka-http</h1>")) } } val orderRoute = path("order"){ get{ complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, "<h1>Say order to akka-http</h1>")) } } val customerRoute = path("customer"){ get{ complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, "<h1>Say customer to akka-http</h1>")) } } val routes = pathPrefix("v1") { userRoute ~ orderRoute ~ customerRoute } ~ path("")(getFromResource("public/index.html")) val bindingFuture = Http().bindAndHandle(routes,"localhost",80) println(s"Server online at http://localhost:80/\nPress RETURN to stop...") StdIn.readLine() bindingFuture.flatMap(_.unbind()) .onComplete(_=>system.terminate()) } }
4.通过变量解析路径
package org.netsharp.rest import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.model.{ContentTypes, HttpEntity} import akka.http.scaladsl.server.Directives._ import akka.stream.ActorMaterializer import scala.io.StdIn object WebServer { def main(args:Array[String]):Unit={ implicit val system = ActorSystem("netsharp") implicit val materializer = ActorMaterializer() implicit val executionContext = system.dispatcher val xroute=path(Segment/Segment/Segment){(v,domain,operation)=> get{ complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, s"version:$v;domain:$domain;operation:$operation")) } } val bindingFuture = Http().bindAndHandle(xroute,"localhost",80) println(s"Server online at http://localhost:80/\nPress RETURN to stop...") StdIn.readLine() bindingFuture.flatMap(_.unbind()) .onComplete(_=>system.terminate()) } }
a.sbt启动项目:run
b.浏览器中输入地址:http://localhost/v1/user/create
c.显示为:version:v1;domain:user;operation:create
5.路由机制的多级变量
package org.netsharp.rest import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.model.{ContentTypes, HttpEntity} import akka.http.scaladsl.server.Directives._ import akka.stream.ActorMaterializer import scala.io.StdIn object WebServer { def main(args:Array[String]):Unit={ implicit val system = ActorSystem("netsharp") implicit val materializer = ActorMaterializer() implicit val executionContext = system.dispatcher val xroute=path(Segments){xs=> get{ complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, xs.toString())) } } val bindingFuture = Http().bindAndHandle(xroute,"localhost",80) println(s"Server online at http://localhost:80/\nPress RETURN to stop...") StdIn.readLine() bindingFuture.flatMap(_.unbind()) .onComplete(_=>system.terminate()) } }
a.sbt启动项目:run
b.浏览器中输入地址:http://localhost/v1/user/create
c.显示为:List(v1, user, create)
6.akka-http与actor结合
作者 :秋时
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。