Akka 将两条路线组合成一条

Akka 将两条路线组合成一条,akka,akka-http,Akka,Akka Http,让我们考虑一个简化的例子 def routes: Route = { pathPrefix("parent" / IntNumber) { (id) => get { complete(id) } ~ pathPrefix("child") { // this would be in separate file get { complete(s"parent/$id/child") } } } }

让我们考虑一个简化的例子

def routes: Route = {
  pathPrefix("parent" / IntNumber) { (id) =>
    get {
      complete(id)
    } ~
    pathPrefix("child") { // this would be in separate file
      get {
        complete(s"parent/$id/child")
      }
    }
  }
}
我需要的是

def childRoutes: Route = {
  pathPrefix("child") {
    get {
      complete(s"parent/$id/child")
    }
  }
}

到一个单独的文件中,并将其组成一个父路由,但我不知道如何从父路由传播变量
id

路由是函数

使用akka http时需要记住的一点是,
路由
只是一个函数:

因此,您可以创建一个高阶函数来实例化
childRoute

//Child.scala
val childRoute : (Int) => Route = 
  (id) => pathPrefix("child") {
    get {
      complete(s"parent/$id/child")
    }
  }
现在可以与父级组成:

//Parent.scala
val routes: Route = 
  pathPrefix("parent" / IntNumber) { (id) =>
    get{
      complete(id)
    } ~ childRoute(id)
  }
路线不一致

作为旁注:你的孩子的路线永远不会到达。由于您正在与子级编写一个
get{complete(id)}
,该子级也有一个
get
,因此您将始终返回
complete(id)
。请求永远不会到达
完成的(s“parent/$id/child”)

//Parent.scala
val routes: Route = 
  pathPrefix("parent" / IntNumber) { (id) =>
    get{
      complete(id)
    } ~ childRoute(id)
  }