zoukankan      html  css  js  c++  java
  • 基于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/
    Press 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/
    Press 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/
    Press 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结合

  • 相关阅读:
    SCAU 9504 面试
    SCAU 9503 懒人选座位
    SCAU 8628 相亲
    SCAU 10691 ACM 光环
    SCAU 8626 原子量计数
    SCAU 10674 等差对
    HDU ACM 1048 The Hardest Problem Ever (水题)
    SCAU 9502 ARDF
    SCAU 10686 DeathGod不知道的事情
    SCAU 8629 热身游戏(高精度)
  • 原文地址:https://www.cnblogs.com/Netsharp/p/9755057.html
Copyright © 2011-2022 走看看