如何在 Akka Http 中拆分路由
How to split routes in Akka Http
将需要 implicit ActorSystem
的路由拆分到不同文件的最佳方法是什么?假设我有这个(非工作)代码
// in UserRoutes.scala
object UserRoutes {
val route: Route = ???
}
// in OrderRoutes.scala
object OrderRoutes {
val route: Route = ???
}
// In MyApp.scala
object MyApp extends App {
implicit val system = ActorSystem(Behaviors.empty, "my-system")
implicit val ec = system.executionContext
val route = UserRoutes.route ~ OrderRoutes.route
Http().newServerAt("localhost", 8888).bind(route)
}
所有这些路由都发出 HTTP 请求,因此它们需要 ActorSystem
,传递它的最佳方式是什么?将对象制作成 类 并将其传递给构造函数还是有更聪明的东西?
你可以有类似的东西
// in UserRoutes.scala
object UserRoutes {
def route(implicit sys: ActorSystem): Route = ???
}
// in OrderRoutes.scala
object OrderRoutes {
def route(implicit sys: ActorSystem): Route = ???
}
在您的应用中,您隐含地拥有 actor 系统,然后您将能够保持 val route = UserRoutes.route ~ OrderRoutes.route
原样。
如果我必须使用某些服务,我通常会使用 class
class UserRoutes(auth: AuthService, profile: ProfileService)(implicit sys: ActorSystem) {
val route : Route = ???
}
将需要 implicit ActorSystem
的路由拆分到不同文件的最佳方法是什么?假设我有这个(非工作)代码
// in UserRoutes.scala
object UserRoutes {
val route: Route = ???
}
// in OrderRoutes.scala
object OrderRoutes {
val route: Route = ???
}
// In MyApp.scala
object MyApp extends App {
implicit val system = ActorSystem(Behaviors.empty, "my-system")
implicit val ec = system.executionContext
val route = UserRoutes.route ~ OrderRoutes.route
Http().newServerAt("localhost", 8888).bind(route)
}
所有这些路由都发出 HTTP 请求,因此它们需要 ActorSystem
,传递它的最佳方式是什么?将对象制作成 类 并将其传递给构造函数还是有更聪明的东西?
你可以有类似的东西
// in UserRoutes.scala
object UserRoutes {
def route(implicit sys: ActorSystem): Route = ???
}
// in OrderRoutes.scala
object OrderRoutes {
def route(implicit sys: ActorSystem): Route = ???
}
在您的应用中,您隐含地拥有 actor 系统,然后您将能够保持 val route = UserRoutes.route ~ OrderRoutes.route
原样。
如果我必须使用某些服务,我通常会使用 class
class UserRoutes(auth: AuthService, profile: ProfileService)(implicit sys: ActorSystem) {
val route : Route = ???
}