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.6
og Scala 2.12.6
. Kontroller dine build.properties
og build.sbt
filer 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.sbt
fil:
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 cd
ind i rodmappen på dit projekt. Kør derefter for sbt update
at få afhængighederne.
Automatisk import sørger for at opdatere dit projekt hver gang visse filer opdateres, inklusive build.sbt
filen.
Ø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 App
træk:
object Server extends App {}
Dette gør det muligt for vores Server
objekt 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 ActorSystem
bruges til at styre skuespillere. Det bruges til at oprette og slå dem op. Skuespillere i det samme system deler typisk den samme konfiguration.
Det ExecutionContext
har ansvaret for at udføre Future
s. Det ved, hvor og hvordan det skal udføres, for eksempel i en trådpulje.
Og endelig er en ActorMaterializer
ansvarlig 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- Http
objektet.
For at køre vores Server
objekt 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/hello
og 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 Server
objekt. 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