我正在通过一些示例来学习Akka HTTP堆栈以创建新的REST项目(完全非UI)。我一直在使用和扩充Akka HTTP Microservice Example来处理大量的用例和配置,并对Scala& amp;的表现感到惊喜。 Akka HTTP工作。
目前我的配置如下:
object AkkaHttpMicroservice extends App with Service {
override implicit val system = ActorSystem()
override implicit val executor = system.dispatcher
override implicit val materializer = ActorMaterializer()
override val config = ConfigFactory.load()
override val logger = Logging(system, getClass)
Http().bindAndHandle(routes, config.getString("http.interface"), config.getInt("http.port"))
}
routes
参数只是一个简单的值,其中包含使用path
,pathPrefix
等的典型数据。
有没有办法在多个Scala文件或某个地方设置路由?
我真的希望能够定义一组类来分隔关注点并处理Actor设置和处理以处理应用程序的不同区域,并将编组保留到根App
扩展名。
对于我在Java中使用@javax.ws.rs.Path("/whatever")
等注释在我的类中执行操作的方式,我可能会考虑太多。如果是这种情况,请随时指出思维方式的变化。
答案 0 :(得分:20)
问题1 - 在多个文件中合并路线
您可以非常轻松地组合来自多个文件的路线。
FooRouter.scala
object FooRouter {
val route = path("foo") {
complete {
Ok -> "foo"
}
}
}
BarRouter.scala
object BarRouter {
val route = path("bar") {
complete {
Ok -> "bar"
}
}
}
MainRouter.scala
import FooRouter
import BarRouter
import akka.http.scaladsl.server.Directives._
import ...
object MainRouter {
val routes = FooRouter.route ~ BarRouter.route
}
object AkkaHttpMicroservice extends App with Service {
...
Http().bindAndHandle(MainRouter.routes, config.getString("http.interface"), config.getInt("http.port"))
}
这里有一些文档:
问题2 - 分离路由,编组等
是的,您可以分离路由,编组和应用程序逻辑。这里有激活器示例:https://github.com/theiterators/reactive-microservices
问题3 - 使用注释处理路线
我不知道任何允许您使用注释在akka-http中定义路由的库。尝试了解有关DSL路由的更多信息。这代表了一种不同的http路由方法,但它也是一种方便的工具。