Πώς μπορείτε να δημιουργήσετε ένα Hello World API με Scala και Akka HTTP

Ναι, είναι ακόμα κάτι.

Το Akka είναι μια δημοφιλής εργαλειοθήκη βασισμένη σε ηθοποιού για τη δημιουργία ταυτόχρονων και κατανεμημένων εφαρμογών στο JVM. Αυτές οι εφαρμογές χρησιμοποιούν κυρίως Scala ή Java.

Διαθέτει πολλές ενότητες που βοηθούν στη δημιουργία τέτοιων εφαρμογών και το Akka HTTP είναι ένα από αυτά.

Το Akka HTTP διαθέτει βοηθητικά προγράμματα από πλευράς πελάτη και διακομιστή. Θα επικεντρωθούμε στον διακομιστή σε αυτό το σεμινάριο.

Θα πρέπει να είστε εξοικειωμένοι με το Scala και θα πρέπει να έχετε εγκατεστημένο το SBT και το IntelliJ. Εάν αυτό δεν ισχύει, ελέγξτε τα επίσημα έγγραφα.

Χωρίς άλλη παραλλαγή, ας φτιάξουμε ένα hello world API χρησιμοποιώντας Scala και Akka HTTP!

Ρύθμιση έργου

Μη διστάσετε να κλωνοποιήσετε το repo, βεβαιωθείτε ότι χρησιμοποιείτε το υποκατάστημα 2.1-review-project.

Εάν όχι, θα χρησιμοποιούμε sbt 1.1.6και Scala 2.12.6. Ελέγξτε τα αρχεία σας build.propertiesκαι build.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αρχείου.

Instantiate εξαρτήσεις

Ας δημιουργήσουμε ένα αντικείμενο Scala με το όνομα "src / main / scala" Server. Θα ξεκινήσουμε δημιουργώντας τις εξαρτήσεις που απαιτούνται για τη δημιουργία ενός διακομιστή με το Akka HTTP.

Πρώτον, το αντικείμενο θα επεκτείνει το 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, είναι πάντα καλό να γνωρίζετε τι είναι.

Ένα ActorSystemχρησιμοποιείται για τη διαχείριση φορέων. Χρησιμοποιείται για τη δημιουργία και την αναζήτησή τους. Οι ηθοποιοί στο ίδιο σύστημα μοιράζονται συνήθως την ίδια διαμόρφωση.

Ο ExecutionContextυπεύθυνος εκτέλεσης του Futures. Ξέρει πού και πώς πρέπει να τα εκτελέσει, για παράδειγμα σε ένα νήμα.

Και τέλος, ActorMaterializerείναι υπεύθυνος για τη λειτουργία ροών.

Με αυτό, μπορούμε να δημιουργήσουμε τη γειά σου διαδρομή!

Δημιουργήστε τη διαδρομή

Για να δημιουργήσουμε τη διαδρομή μας, θα χρησιμοποιήσουμε το DSL δρομολόγησης του Akka HTTP. Βασίζεται σε «στρώματα» αυτού που ονομάζεται οδηγία. Για μια επισκόπηση, μη διστάσετε να περιηγηθείτε στα επίσημα έγγραφά τους.

Προσθέστε τη διαδρομή κάτω από τις εξαρτήσεις:

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

Έχουμε ένα πρώτο επίπεδο, όπου προσπαθούμε να αντιστοιχίσουμε τη διαδρομή του εισερχόμενου αιτήματος ως "/ γεια". Εάν δεν ταιριάζει, θα απορριφθεί.

Αν ταιριάζει, θα προσπαθήσει να ταιριάξει με τις εσωτερικές «οδηγίες». Στην περίπτωσή μας αντιστοιχίζουμε τα αιτήματα GET. Ολοκληρώνουμε τον κύκλο αιτήματος / απάντησης με ένα μήνυμα "Γεια, Κόσμος".

Ξεκινήστε τον διακομιστή

Με τη διαδρομή μας που δημιουργήθηκε, το μόνο που πρέπει να κάνουμε είναι να ξεκινήσουμε τον διακομιστή:

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

Δεσμευόμαστε τη διαδρομή μας στον δεδομένο κεντρικό υπολογιστή και τη θύρα χρησιμοποιώντας το Httpαντικείμενο Akka HTTP .

Για να εκτελέσετε το Serverαντικείμενο μας , μπορείτε να κάνετε δεξί κλικ και να πατήσετε Εκτέλεση «Διακομιστής» .

Δώστε του μερικά δευτερόλεπτα για μεταγλώττιση και μετά μεταβείτε σε ένα πρόγραμμα περιήγησης. Πλοηγηθείτε //localhost:9000/helloκαι θα πρέπει να δείτε το "Γεια σας, Κόσμος!" μήνυμα.

Ωραίο, έτσι δεν είναι;

Ξύλευση

Πριν ολοκληρώσουμε αυτό το σεμινάριο θα προσθέσουμε βασική καταγραφή στον διακομιστή μας.

Ίσως έχετε παρατηρήσει ότι δεν υπήρχαν σχόλια όταν εκτελέσαμε το Serverαντικείμενο μας . Δεν έχουμε ιδέα για το εάν πέτυχε ή απέτυχε.

Μπορούμε να υποθέσουμε ότι λειτούργησε μόνο επειδή η εφαρμογή δεν έσπασε.

Ας προσθέσουμε κάποια καταγραφή σε αυτό.

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.

Αν σας άρεσε το Akka HTTP, έχουμε ένα δωρεάν μάθημα που θα ξεκινήσει γρήγορα την ανάπτυξη API με αυτό. Θα δημιουργήσετε ένα API για μια εφαρμογή Todo, που εξηγείται βήμα προς βήμα. Τσέκαρέ το! ??

Γρήγορη έναρξη Akka HTTP

Μάθετε πώς να δημιουργείτε εφαρμογές ιστού και API με το Akka HTTP σε αυτό το δωρεάν μάθημα! link.codemunity.io