ScalaとAkkaHTTPを使用してHelloWorldAPIを構築する方法

はい、それはまだ問題です。

Akkaは、JVMで並行アプリケーションと分散アプリケーションを構築するための人気のあるアクターベースのツールキットです。これらのアプリケーションは主にScalaまたはJavaを使用します。

このようなアプリケーションの構築に役立つモジュールがいくつかあり、AkkaHTTPはその1つです。

Akka HTTPには、クライアント側とサーバー側の両方のユーティリティがあります。このチュートリアルでは、サーバーに焦点を当てます。

Scalaに精通している必要があり、SBTとIntelliJをセットアップしてインストールしている必要があります。そうでない場合は、公式ドキュメントを確認してください。

さらに面倒なことはせずに、ScalaとAkkaHTTPを使用してHelloWorldAPIを構築しましょう。

プロジェクトの設定

リポジトリのクローンを作成してください2.1-review-project。ブランチを使用していることを確認してください。

そうでない場合は、sbt1.1.6とScalaを使用します2.12.6build.propertiesbuild.sbtファイルをチェックして、そこにあるバージョンがこれらと一致することを確認します。

必要な依存関係を追加することから始めましょう。Akka HTTPはアクターとストリームに依存しているため、これらのライブラリも追加する必要があります。

build.sbtファイルの最後に次のスニペットを追加します。

libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-actor" % "2.5.13", "com.typesafe.akka" %% "akka-stream" % "2.5.13", "com.typesafe.akka" %% "akka-http" % "10.1.3",)

自動インポートを有効にするように求められた場合は、それを実行します。それ以外の場合は、ターミナルを開いcdてプロジェクトのルートディレクトリに移動できます。次に、実行sbt updateして依存関係を取得します。

自動インポートでは、build.sbtファイルを含む特定のファイルが更新されるたびに、プロジェクトが必ず更新されます。

依存関係をインスタンス化する

「src / main / scala」の下にServer。という名前のScalaオブジェクトを作成しましょう。まず、AkkaHTTPを使用してサーバーを作成するために必要な依存関係をインスタンス化します。

まず、オブジェクトはApp特性を拡張します。

object Server extends App {}

これにより、Serverオブジェクトを実行可能になります。

サーバーをバインドするためのホストとポートが必要になるので、今すぐ追加しましょう。

val host = "0.0.0.0"val port = 9000

Akka HTTPはその下でAkkaアクターとストリームを使用するため、それらの依存関係も提供する必要があります。

implicit val system: ActorSystem = ActorSystem("helloworld")implicit val executor: ExecutionContext = system.dispatcherimplicit val materializer: ActorMaterializer = ActorMaterializer()

Akka HTTPアプリケーションの開発を開始するために彼らが何をしているのかを知る必要はありませんが、彼らが何のためにあるのかを知っておくのは常に良いことです。

AnActorSystemは、アクターを管理するために使用されます。それらを作成および検索するために使用されます。同じシステム内のアクターは通常、同じ構成を共有します。

ExecutionContext実行を担当しているFutureの。スレッドプールなどで、どこでどのように実行するかを認識しています。

そして最後に、ActorMaterializerはストリームの実行を担当します。

これで、ハロールートを作成できます。

ルートを作成する

ルートを作成するには、AkkaHTTPのルーティングDSLを使用します。これは、ディレクティブと呼ばれるものの「レイヤー」に基づいています。概要については、公式ドキュメントを参照してください。

依存関係の下にルートを追加します。

def route = path("hello") { get { complete("Hello, World!") }}

最初のレイヤーがあり、着信リクエストのパスを「/ hello」として一致させようとします。一致しない場合は拒否されます。

一致する場合は、内部の「ディレクティブ」と一致しようとします。この場合、GETリクエストを照合しています。「Hello、World」メッセージで要求/応答サイクルを完了します。

サーバーを起動します

ルートを作成したら、サーバーを起動するだけです。

Http().bindAndHandle(route, host, port)

We are binding our route to the given host and port using the Akka HTTP Http object.

To run our Server object, you can right-click it and hit Run ‘Server’.

Give it a couple of seconds to compile, then go to a browser. Navigate to //localhost:9000/hello and you should see our “Hello, World!” message.

Cool, isn’t it?

Logging

Before wrapping up this tutorial we’ll add basic logging to our server.

You might have noticed that there was no feedback when we ran our Server object. We have no clue whether it succeeded or failed.

We can only assume it worked because the application didn’t crash.

Let’s add some logging to it.

If you look into the bindAndHandle function from the Http object, it returns a future of ServerBinding . We can hook some logs into the future’s onComplete function.

Let’s do that:

val bindingFuture = Http().bindAndHandle(route, host, port)bindingFuture.onComplete { case Success(serverBinding) => println(s"listening to ${serverBinding.localAddress}") case Failure(error) => println(s"error: ${error.getMessage}")}

Run the Server again, and this time you should see:

listening to /0:0:0:0:0:0:0:0:9000

Wrapping up

While using Scala and Akka HTTP is not the fastest way to develop APIs, it allows you to integrate other Akka modules, such as actors, streams, clusters, and more, making it easier to develop resilient and scalable systems.

Having said that, it’s good to keep in mind that developing an application using Scala and/or Akka doesn’t necessarily mean that it will be resilient and scalable. You’ll still need to perform work to accomplish that, but it’s easier than with other technologies.

If you liked Akka HTTP, we’ve got a free course that’ll quickstart your way into developing APIs with it. You’ll build an API for a Todo application, explained step by step. Check it out! ??

Akka HTTP Quickstart

Learn how to create web applications and APIs with Akka HTTP in this free course!link.codemunity.io