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结合

  • 相关阅读:
    Serverless 时代下大规模微服务应用运维的最佳实践
    Dubbo 跨语言调用神兽:dubbo-go-pixiu
    Flink 1.12 资源管理新特性回顾
    [JDBC] Kettle on MaxCompute 使用指南
    AI运动:阿里体育端智能最佳实践
    MaxCompute非事务表如何更新数据
    如何利用云原生技术构建现代化应用
    实时数仓入门训练营:实时计算 Flink 版 SQL 实践
    实时数仓入门训练营:基于 Apache Flink + Hologres 的实时推荐系统架构解析
    Flink + Iceberg + 对象存储,构建数据湖方案
  • 原文地址:https://www.cnblogs.com/Netsharp/p/9755057.html
Copyright © 2011-2022 走看看