Hogyan készíthet egy Hello World API-t a Scala és az Akka HTTP segítségével

Igen, ez még mindig egy dolog.

Az Akka népszerű színészalapú eszköztár egyidejű és elosztott alkalmazások kiépítésére a JVM-ben. Ezek az alkalmazások többnyire Scalát vagy Java-t használnak.

Számos modulja van, amelyek segítenek ilyen alkalmazások felépítésében, és az Akka HTTP is ezek közé tartozik.

Az Akka HTTP kliens- és szerveroldali segédprogramokkal is rendelkezik. Ebben az oktatóanyagban a szerverre fogunk koncentrálni.

Ismernie kell a Scalát, és telepítenie kell az SBT és az IntelliJ beállításokat. Ha nem ez a helyzet, ellenőrizze a hivatalos dokumentumokat.

Minden további nélkül építsünk egy hello world API-t a Scala és az Akka HTTP használatával!

Projekt beállítása

Klónozza nyugodtan a repót, győződjön meg róla, hogy az ágat használja 2.1-review-project.

Ha nem, akkor az sbt-t 1.1.6és a Scalát fogjuk használni 2.12.6. Ellenőrizze a fájljait, build.propertiesés ellenőrizze build.sbt, hogy az ottani verziók megfelelnek-e ezeknek.

Kezdjük a szükséges függőségek összeadásával. Mivel az Akka HTTP színészektől és adatfolyamoktól függ, ezeket a könyvtárakat is hozzá kell adnunk.

Adja hozzá a következő részletet a build.sbtfájl végéhez :

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

Ha a rendszer kéri az automatikus importálás engedélyezését, akkor tegye meg. Ellenkező esetben megnyithat egy terminált és cda projekt gyökérkönyvtárába. Ezután fuss, sbt updatehogy megkapd a függőségeket.

Az automatikus importálás biztosítja a projekt minden egyes frissítését, amikor bizonyos fájlokat, beleértve a build.sbtfájlt is, frissítenek .

Azonnali függőségek

Hozzunk létre egy Scala objektumot az „src / main / scala” néven Server. Először a szerver létrehozásához szükséges függőségeket szinkronizáljuk az Akka HTTP-vel.

Először az objektum kiterjeszti a Apptulajdonságot:

object Server extends App {}

Ez lehetővé teszi az Serverobjektumunk futhatóságát.

Szükségünk lesz egy gazdagépre és egy portra a szerver összekapcsolásához, ezért adjuk hozzá őket most:

val host = "0.0.0.0"val port = 9000

Mivel az Akka HTTP Akka színészeket és alatta lévő streameket használ, meg kell adnunk a függőségüket is:

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

Annak ellenére, hogy nem kell tudnia, mit csinálnak az Akka HTTP alkalmazások fejlesztésének megkezdéséhez, mindig jó tisztában lenni azzal, hogy mire valók.

A ActorSystemszínészek irányítására használják. Ezek létrehozására és felkutatására használják. Az ugyanazon rendszer szereplői általában ugyanazt a konfigurációt használják.

A ExecutionContextfelelős az Futures végrehajtásáért . Tudja, hogy hol és hogyan kell végrehajtani őket, például egy szálkészletben.

És végül egy ActorMaterializerfolyó felelős a folyamfolyamokért.

Ezzel elkészíthetjük a hello útvonalunkat!

Készítse el az útvonalat

Útvonalunk elkészítéséhez az Akka HTTP útválasztási DSL-jét fogjuk használni. Az irányelvnek nevezett „rétegeken” alapul. Áttekintésként böngésszen a hivatalos dokumentumaik között.

Adja hozzá az útvonalat a függőségek alá:

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

Van egy első rétegünk, ahol megpróbáljuk a bejövő kérés elérési útját "/ hello" -nak egyeztetni. Ha nem egyezik, akkor elutasításra kerül.

Ha megfelel, akkor megpróbálja összehangolni a belső „irányelveket”. Esetünkben egyeztetjük a GET kéréseket. A kérés / válasz ciklust egy „Hello, World” üzenettel fejezzük be.

Indítsa el a szervert

Létrehozott útvonalunkkal csak a szervert kell elindítanunk:

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

Az Akka HTTP Httpobjektummal kötjük az útvonalunkat az adott gazdagéphez és porthoz .

Az Serverobjektumunk futtatásához kattintson rá a jobb gombbal, és kattintson a "Szerver" futtatására .

Adjon pár másodpercet a fordításhoz, majd lépjen a böngészőhöz. Navigáljon ide, //localhost:9000/helloés látnia kell a „Hello, World!” Oldalunkat üzenet.

Hűvös, nem?

Fakitermelés

Az oktatóanyag felvétele előtt hozzáadjuk az alapnaplózást a szerverünkhöz.

Lehet, hogy észrevette, hogy nem érkezett visszajelzés, amikor lefuttattuk az Serverobjektumunkat. Fogalmunk sincs, hogy sikerült-e vagy sem.

Csak feltételezhetjük, hogy működött, mert az alkalmazás nem összeomlott.

Adjunk hozzá néhány naplózást.

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