Як ви можете створити 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()

Незважаючи на те, що вам не потрібно знати, що вони роблять, щоб розпочати розробку HTTP-програм Akka, завжди добре знати, для чого вони потрібні.

Ан 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.

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