Akka:Http:RoutingDSL
Akka HTTP provides a flexible routing DSL for elegantly defining RESTful web services. It picks up where the low-level API leaves off and offers much of the higher-level functionality of typical web servers or frameworks, like deconstruction of URIs, content negotiation or static content serving.
Dynamic Routing Example
case class MockDefinition(path: String, requests: Seq[JsValue], responses: Seq[JsValue])
implicit val format = jsonFormat3(MockDefinition)
@volatile var state = Map.empty[String, Map[JsValue, JsValue]]
// fixed route to update state
val fixedRoute: Route = post {
pathSingleSlash {
entity(as[MockDefinition]) { mock =>
val mapping = mock.requests.zip(mock.responses).toMap
state = state + (mock.path -> mapping)
complete("ok")
}
}
}
// dynamic routing based on current state
val dynamicRoute: Route = ctx => {
val routes = state.map {
case (segment, responses) =>
post {
path(segment) {
entity(as[JsValue]) { input =>
complete(responses.get(input))
}
}
}
}
concat(routes.toList: _*)(ctx)
}
val route = fixedRoute ~ dynamicRoute