So erstellen Sie eine Hello World-API mit Scala und Akka HTTP

Ja, das ist immer noch eine Sache.

Akka ist ein beliebtes akteursbasiertes Toolkit zum Erstellen gleichzeitiger und verteilter Anwendungen in der JVM. Diese Anwendungen verwenden meistens Scala oder Java.

Es verfügt über mehrere Module, mit denen solche Anwendungen erstellt werden können, und Akka HTTP ist eines davon.

Akka HTTP verfügt sowohl über clientseitige als auch über serverseitige Dienstprogramme. Wir werden uns in diesem Tutorial auf den Server konzentrieren.

Sie sollten mit Scala vertraut sein und SBT und IntelliJ einrichten und installieren. Wenn dies nicht der Fall ist, überprüfen Sie die offiziellen Dokumente.

Lassen Sie uns ohne weiteres eine Hallo-Welt-API mit Scala und Akka HTTP erstellen!

Projektaufbau

Fühlen Sie sich frei, das Repo zu klonen, stellen Sie sicher, dass Sie den Zweig verwenden 2.1-review-project.

Wenn nicht, verwenden wir sbt 1.1.6und Scala 2.12.6. Überprüfen Sie Ihre build.propertiesund build.sbtDateien, um sicherzustellen, dass die dortigen Versionen mit diesen übereinstimmen.

Beginnen wir mit dem Hinzufügen der erforderlichen Abhängigkeiten. Da Akka HTTP von Akteuren und Streams abhängt, müssen wir auch diese Bibliotheken hinzufügen.

Fügen Sie am Ende Ihrer build.sbtDatei das folgende Snippet hinzu :

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",)

Wenn Sie aufgefordert werden, den automatischen Import zu aktivieren, führen Sie dies aus. Andernfalls können Sie ein Terminal öffnen und cdin das Stammverzeichnis Ihres Projekts wechseln. Führen Sie dann aus sbt update, um die Abhängigkeiten abzurufen.

Durch den automatischen Import wird sichergestellt, dass Ihr Projekt jedes Mal aktualisiert wird, wenn bestimmte Dateien, einschließlich der build.sbtDatei, aktualisiert werden.

Abhängigkeiten instanziieren

Lassen Sie uns ein Scala-Objekt unter dem Namen "src / main / scala" erstellen Server. Wir beginnen mit der Instanziierung der Abhängigkeiten, die zum Erstellen eines Servers mit Akka HTTP erforderlich sind.

Erstens erweitert das Objekt das AppMerkmal:

object Server extends App {}

Dadurch kann unser ServerObjekt ausgeführt werden.

Wir benötigen einen Host und einen Port, um den Server zu binden. Fügen wir sie jetzt hinzu:

val host = "0.0.0.0"val port = 9000

Da Akka HTTP darunter liegende Akka-Akteure und -Streams verwendet, müssen wir auch deren Abhängigkeiten angeben:

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

Auch wenn Sie nicht wissen müssen, was sie tun, um mit der Entwicklung von Akka-HTTP-Anwendungen zu beginnen, ist es immer gut, sich darüber im Klaren zu sein, wofür sie gedacht sind.

An ActorSystemwird verwendet, um Schauspieler zu verwalten. Es wird zum Erstellen und Nachschlagen verwendet. Akteure im selben System verwenden normalerweise dieselbe Konfiguration.

Der ExecutionContextist verantwortlich für die Ausführung von Futures. Es weiß, wo und wie es sie ausführen soll, zum Beispiel in einem Thread-Pool.

Und schließlich ist ein ActorMaterializerfür das Ausführen von Streams verantwortlich.

Damit können wir unsere Hallo-Route erstellen!

Erstellen Sie die Route

Um unsere Route zu erstellen, verwenden wir das Routing-DSL von Akka HTTP. Es basiert auf „Ebenen“ einer sogenannten Richtlinie. Um einen Überblick zu erhalten, können Sie die offiziellen Dokumente durchsuchen.

Fügen Sie die Route unterhalb der Abhängigkeiten hinzu:

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

Wir haben eine erste Ebene, in der wir versuchen, den Pfad der eingehenden Anfrage als "/ hallo" abzugleichen. Wenn es nicht übereinstimmt, wird es abgelehnt.

Wenn es übereinstimmt, wird versucht, mit den inneren "Anweisungen" übereinzustimmen. In unserem Fall stimmen wir mit GET-Anfragen überein. Wir schließen den Anforderungs- / Antwortzyklus mit einer Nachricht „Hallo Welt“ ab.

Starten Sie den Server

Nachdem unsere Route erstellt wurde, müssen wir nur den Server starten:

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

Wir binden unsere Route mithilfe des Akka-HTTP- HttpObjekts an den angegebenen Host und Port .

Um unser ServerObjekt auszuführen , können Sie mit der rechten Maustaste darauf klicken und auf "Server" klicken .

Nehmen Sie sich ein paar Sekunden Zeit zum Kompilieren und rufen Sie dann einen Browser auf. Navigieren Sie zu //localhost:9000/hellound Sie sollten unser "Hallo Welt!" Botschaft.

Cool, nicht wahr?

Protokollierung

Bevor wir dieses Tutorial abschließen, fügen wir unserem Server die grundlegende Protokollierung hinzu.

Möglicherweise haben Sie bemerkt, dass beim Ausführen unseres ServerObjekts keine Rückmeldung erfolgte . Wir haben keine Ahnung, ob es erfolgreich war oder nicht.

Wir können nur davon ausgehen, dass es funktioniert hat, weil die Anwendung nicht abgestürzt ist.

Fügen wir etwas Protokollierung hinzu.

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