如何在 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 = ???
}