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.6
y Scala 2.12.6
. Compruebe sus archivos build.properties
y build.sbt
para 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.sbt
archivo:
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 cd
acceder al directorio raíz de su proyecto. Luego, ejecute sbt update
para obtener las dependencias.
La importación automática se asegurará de actualizar su proyecto cada vez que se actualicen ciertos archivos, incluido el build.sbt
archivo.
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 App
rasgo:
object Server extends App {}
Esto permitirá que nuestro Server
objeto 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 ActorSystem
se utiliza para gestionar actores. Se utiliza para crearlos y buscarlos. Los actores del mismo sistema suelen compartir la misma configuración.
Se ExecutionContext
encarga de ejecutar Future
s. Sabe dónde y cómo debe ejecutarlos, por ejemplo, en un grupo de subprocesos.
Y finalmente, an ActorMaterializer
está 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 Http
objeto HTTP Akka .
Para ejecutar nuestro Server
objeto, 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/hello
y 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 Server
objeto. 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