基於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結合

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM