Hvordan du kan oprette en Hello World API med Scala og Akka HTTP

Ja, det er stadig en ting.

Akka er et populært skuespillerbaseret værktøjssæt til opbygning af samtidige og distribuerede applikationer i JVM. Disse applikationer bruger for det meste Scala eller Java.

Det har flere moduler, der hjælper med at opbygge sådanne applikationer, og Akka HTTP er en af ​​dem.

Akka HTTP har både klientsiden og server-side-hjælpeprogrammer. Vi vil fokusere på serveren i denne vejledning.

Du skal være fortrolig med Scala, og du skal have SBT og IntelliJ opsætning og installeret. Hvis det ikke er tilfældet, skal du kontrollere de officielle dokumenter.

Uden yderligere ado, lad os opbygge en hello world API ved hjælp af Scala og Akka HTTP!

Projektopsætning

Du er velkommen til at klone repoen, sørg for at du bruger filialen 2.1-review-project.

Hvis ikke, bruger vi sbt 1.1.6og Scala 2.12.6. Kontroller dine build.propertiesog build.sbtfiler for at sikre dig, at versionerne der matcher disse.

Lad os starte med at tilføje de krævede afhængigheder. Da Akka HTTP afhænger af aktører og streams, bliver vi også nødt til at tilføje disse biblioteker.

Tilføj følgende uddrag i slutningen af ​​din build.sbtfil:

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

Hvis du bliver bedt om at aktivere automatisk import, skal du gøre det. Ellers kan du åbne en terminal og cdind i rodmappen på dit projekt. Kør derefter for sbt updateat få afhængighederne.

Automatisk import sørger for at opdatere dit projekt hver gang visse filer opdateres, inklusive build.sbtfilen.

Øjeblikkelig afhængighed

Lad os oprette et Scala-objekt under "src / main / scala" med navnet Server. Vi starter med at instantiere de afhængigheder, der kræves for at oprette en server med Akka HTTP.

For det første vil objektet udvide Apptræk:

object Server extends App {}

Dette gør det muligt for vores Serverobjekt at blive kørt.

Vi har brug for en vært og en port til at binde serveren, så lad os tilføje dem nu:

val host = "0.0.0.0"val port = 9000

Da Akka HTTP bruger Akka-aktører og streams nedenunder, bliver vi også nødt til at levere deres afhængigheder:

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

Selvom du ikke behøver at vide, hvad de gør for at begynde at udvikle Akka HTTP-applikationer, er det altid godt at være opmærksom på, hvad de er til.

An ActorSystembruges til at styre skuespillere. Det bruges til at oprette og slå dem op. Skuespillere i det samme system deler typisk den samme konfiguration.

Det ExecutionContexthar ansvaret for at udføre Futures. Det ved, hvor og hvordan det skal udføres, for eksempel i en trådpulje.

Og endelig er en ActorMaterializeransvarlig for at køre streams.

Når det er gjort, kan vi oprette vores hej rute!

Opret ruten

For at oprette vores rute bruger vi Akka HTTP's routing DSL. Det er baseret på "lag" af det, der kaldes et direktiv. For en oversigt er du velkommen til at gennemse deres officielle dokumenter.

Tilføj ruten under afhængighederne:

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

Vi har et første lag, hvor vi prøver at matche den indkommende anmodnings sti som “/ hej”. Hvis det ikke stemmer overens, afvises det.

Hvis det matcher, vil det forsøge at matche indre "direktiver". I vores tilfælde matcher vi GET-anmodninger. Vi gennemfører anmodningen / svarcyklussen med en “Hello, World” -meddelelse.

Start serveren

Med vores rute oprettet er alt, hvad vi skal gøre, at starte serveren:

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

Vi binder vores rute til den givne vært og port ved hjælp af Akka HTTP- Httpobjektet.

For at køre vores Serverobjekt kan du højreklikke på det og trykke på Kør 'Server' .

Giv det et par sekunder at kompilere, og gå derefter til en browser. Naviger til, //localhost:9000/helloog du skal se vores "Hej verden!" besked.

Fedt, er det ikke?

Logning

Før vi afslutter denne vejledning, tilføjer vi grundlæggende logning til vores server.

Du har måske bemærket, at der ikke var nogen feedback, da vi kørte vores Serverobjekt. Vi har ingen anelse om, om det lykkedes eller mislykkedes.

Vi kan kun antage, at det fungerede, fordi applikationen ikke styrtede ned.

Lad os tilføje noget logning til det.

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.

Hvis du kunne lide Akka HTTP, har vi et gratis kursus, der hurtigt starter din vej til at udvikle API'er med det. Du bygger en API til en Todo-applikation, forklaret trin for trin. Tjek det ud! ??

Akka HTTP hurtigstart

Lær hvordan du opretter webapplikationer og API'er med Akka HTTP i dette gratis kursus! link.codemunity.io