Как можете да изградите API на Hello World с помощта на Scala и Akka HTTP

Да, все още е нещо.

Akka е популярен инструментариум, базиран на актьори за изграждане на едновременни и разпределени приложения в JVM. Тези приложения използват предимно Scala или Java.

Той има няколко модула, които помагат за изграждането на такива приложения, а Akka HTTP е един от тях.

Akka HTTP има помощни програми както от страна на клиента, така и от страна на сървъра. В този урок ще се съсредоточим върху сървъра.

Трябва да сте запознати със Scala и да инсталирате и инсталирате SBT и IntelliJ. Ако случаят не е такъв, проверете официалните документи.

Без повече шум, нека изградим API за здрав свят, използвайки Scala и Akka HTTP!

Настройка на проекта

Чувствайте се свободни да клонирате репото, уверете се, че използвате клона 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файла.

Инстанцирайте зависимостите

Нека създадем 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 приложения, винаги е добре да сте наясно за какво са.

An ActorSystemсе използва за управление на актьори. Използва се за създаването и търсенето им. Актьорите в една и съща система обикновено споделят една и съща конфигурация.

В ExecutionContextотговаря за изпълнение Futureс. Той знае къде и как трябва да ги изпълни, например в нишка.

И накрая, an ActorMaterializerотговаря за пускането на потоци.

С това можем да създадем своя здравей маршрут!

Създайте маршрута

За да създадем нашия маршрут, ще използваме DSL за маршрутизиране на Akka HTTP. Тя се основава на „слоеве“ на това, което се нарича директива. За общ преглед, не се колебайте да разгледате техните официални документи.

Добавете маршрута под зависимостите:

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

Имаме първи слой, където се опитваме да съпоставим пътя на входящата заявка като „/ здравей“. Ако не съвпада, ще бъде отхвърлен.

Ако съвпада, той ще се опита да съответства на вътрешните „директиви“. В нашия случай ние отговаряме на GET заявки. Завършваме цикъла на заявка / отговор със съобщение „Здравей, Свят“.

Стартирайте сървъра

Със създадения ни маршрут всичко, което трябва да направим, е да стартираме сървъра:

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

Ние обвързваме маршрута си с дадения хост и порт, използвайки Akka HTTP Httpобекта.

За да стартирате нашия Serverобект, можете да щракнете с десния бутон върху него и да натиснете Run '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.

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