Маршруты являются функциями
При работе с akka-http следует помнить, что Route
- это просто функция, из документации :
type Route = (RequestContext) ⇒ Future[RouteResult]
Следовательно, вы можете создать функцию высшего порядка для создания экземпляра 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)
. complete(s"parent/$id/child")
никогда не будет достигнут запросом.