Cómo se puede construir una API Hello World con Scala y Akka HTTP

Sí, todavía es una cosa.

Akka es un popular kit de herramientas basado en actores para crear aplicaciones concurrentes y distribuidas en la JVM. Estas aplicaciones utilizan principalmente Scala o Java.

Tiene varios módulos que ayudan a construir tales aplicaciones, y Akka HTTP es uno de ellos.

Akka HTTP tiene utilidades del lado del cliente y del lado del servidor. Nos centraremos en el servidor en este tutorial.

Debe estar familiarizado con Scala, y debe tener SBT e IntelliJ configurados e instalados. Si ese no es el caso, consulte los documentos oficiales.

¡Sin más preámbulos, construyamos una API hello world usando Scala y Akka HTTP!

Configuración del proyecto

Siéntase libre de clonar el repositorio, asegúrese de que está utilizando la rama 2.1-review-project.

Si no, usaremos sbt 1.1.6y Scala 2.12.6. Compruebe sus archivos build.propertiesy build.sbtpara asegurarse de que las versiones coincidan con estos.

Comencemos agregando las dependencias requeridas. Debido a que Akka HTTP depende de actores y flujos, también necesitaremos agregar esas bibliotecas.

Agregue el siguiente fragmento al final de su build.sbtarchivo:

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

Si se le solicita que habilite la importación automática, hágalo. De lo contrario, puede abrir una terminal y cdacceder al directorio raíz de su proyecto. Luego, ejecute sbt updatepara obtener las dependencias.

La importación automática se asegurará de actualizar su proyecto cada vez que se actualicen ciertos archivos, incluido el build.sbtarchivo.

Instancia de dependencias

Creemos un objeto Scala bajo "src / main / scala" llamado Server. Comenzaremos instanciando las dependencias necesarias para crear un servidor con Akka HTTP.

Primero, el objeto extenderá el Apprasgo:

object Server extends App {}

Esto permitirá que nuestro Serverobjeto sea ejecutable.

Necesitaremos un host y un puerto para vincular el servidor, así que agregémoslos ahora:

val host = "0.0.0.0"val port = 9000

Debido a que Akka HTTP usa actores y transmisiones de Akka debajo, también tendremos que proporcionar sus dependencias:

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

Aunque no necesita saber qué hacen para comenzar a desarrollar aplicaciones HTTP de Akka, siempre es bueno saber para qué sirven.

An ActorSystemse utiliza para gestionar actores. Se utiliza para crearlos y buscarlos. Los actores del mismo sistema suelen compartir la misma configuración.

Se ExecutionContextencarga de ejecutar Futures. Sabe dónde y cómo debe ejecutarlos, por ejemplo, en un grupo de subprocesos.

Y finalmente, an ActorMaterializerestá a cargo de ejecutar streams.

¡Una vez hecho esto, podemos crear nuestra ruta de saludo!

Crea la ruta

Para crear nuestra ruta, usaremos el enrutamiento DSL de Akka HTTP. Se basa en "capas" de lo que se llama directiva. Para obtener una descripción general, no dude en navegar por sus documentos oficiales.

Agregue la ruta debajo de las dependencias:

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

Tenemos una primera capa, donde intentamos hacer coincidir la ruta de la solicitud entrante como "/ hola". Si no coincide, será rechazado.

Si coincide, intentará coincidir con las "directivas" internas. En nuestro caso, estamos haciendo coincidir las solicitudes GET. Completamos el ciclo de solicitud / respuesta con un mensaje de "Hola, mundo".

Inicie el servidor

Con nuestra ruta creada, todo lo que tenemos que hacer es iniciar el servidor:

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

Estamos vinculando nuestra ruta al host y puerto dados utilizando el Httpobjeto HTTP Akka .

Para ejecutar nuestro Serverobjeto, puede hacer clic derecho en él y presionar Ejecutar 'Servidor' .

Espere un par de segundos para compilar, luego vaya a un navegador. Navega hacia //localhost:9000/helloy deberías ver nuestro "¡Hola, mundo!" mensaje.

Genial, ¿no?

Inicio sesión

Antes de concluir este tutorial, agregaremos un registro básico a nuestro servidor.

Es posible que haya notado que no hubo comentarios cuando ejecutamos nuestro Serverobjeto. No tenemos ni idea de si tuvo éxito o fracasó.

Solo podemos asumir que funcionó porque la aplicación no se bloqueó.

Agreguemos un poco de registro.

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