Как разделить маршруты в Akka Http

#scala #akka #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 , каков наилучший способ их передачи? Создавайте объекты в классы и передавайте их конструктору или есть что-то более умное?

Комментарии:

1. Я бы остановился на классическом (облегченном) шаблоне внедрения зависимостей для scala, то есть, как вы говорите, преобразуйте маршруты в классы и поместите систему ActorSystem в конструктор

Ответ №1:

У вас может быть что-то вроде

 // in UserRoutes.scala object UserRoutes {  def route(implicit sys: ActorSystem): Route = ??? }  // in OrderRoutes.scala object OrderRoutes {  def route(implicit sys: ActorSystem): Route = ??? }   

В вашем приложении у вас есть система актеров неявно, и тогда вы сможете сохранить val route = UserRoutes.route ~ OrderRoutes.route все как есть.

Я обычно использую класс, если мне нужно воспользоваться некоторыми услугами

 class UserRoutes(auth: AuthService, profile: ProfileService)(implicit sys: ActorSystem) {  val route : Route = ??? }