新しいRESTプロジェクト(完全に非UI)を作成するためのAkka HTTPスタックを学習するいくつかの例を実行しています。 Akka HTTPマイクロサービスの例 を使用および拡張しています。 =一連のユースケースと構成を処理し、Scala&AkkaHTTPがうまく機能することに嬉しい驚きを感じています。
現在、私は次のような構成になっています。
_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ファイルまたはどこかにある例でルーティングを設定する方法はありますか?
懸念事項を分離し、アクターのセットアップと処理を処理してアプリケーションのさまざまな領域を処理し、マーシャリングをルートApp
拡張機能に任せるクラスのセットを定義できるようにしたいと思います。
これは、クラスで@javax.ws.rs.Path("/whatever")
のようなアノテーションを使用して、Java)で物事をどのように行ったかという点で考えすぎている可能性があります。考え方の変化を排除します。
いくつかの異なるキーワードのセットを検索しようとしましたが、間違った質問をしていると思います(たとえば、 1 、 2 )。
問題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でルーティングを定義できるlibはわかりません。 DSLルーティングについてもっと学びましょう。これはhttpルーティングへの異なるアプローチを表していますが、便利なツールでもあります。