import io.javalin.Javalin;

public class App {
    public static void main(String() args) {
        var app = Javalin.create()
            .get("/", ctx -> ctx.result("Hello World"))
            .start(7070);
    }
}

Observe a mudança do método fluente e o código limpo, permitindo-nos descrever a definição do servidor e os endpoints juntos.

Javalin evita inchaço e qualquer sintaxe de dependência desnecessária. Se você está procurando uma estrutura minimalista para realizar o trabalho, Javalin pode ser a estrutura para você.

Micronauta

Micronaut é uma ótima opção quando o tempo de inicialização é fundamental e/ou se você deseja uma estrutura multilíngue e full stack para construir microsserviços e aplicativos sem servidor. Ele fornece um compilador AOT que fornece desempenho e injeção de dependência sem reflexão. Ele pode ser executado na JVM ou compilar imagens nativas com GraalVM.

A forma como o contêiner Micronaut IoC (inversão de controle) funciona significa que todas as dependências são resolvidas durante a compilação. Isso proporciona tempos de inicialização rápidos, essenciais para microsserviços. O design do Micronaut também significa menor uso de memória para injeção de dependência.

Micronaut é poliglota, com suporte para Java, Groovy e Kotlin, com planos de suporte para Scala.

Matthew Tyson

Micronuat foi projetado para a nuvem. Possui integração automatizada para descoberta de serviços com provedores como Kubernetes e rastreamento como Jaeger. Isso permite evitar codificação e projetar microsserviços com descoberta e rastreamento automatizados por meio de configuração. Ele também oferece suporte a configurações distribuídas como Consul.

O Micronaut possui conectores de armazenamento de dados integrados e suporte para camadas de acesso a dados. Ele também oferece suporte a descritores OpenAPI.

Apesar de seus recursos avançados, os endpoints do Micronaut são simples e legíveis:

import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;

@Controller("/hello")
public class HelloController {

    @Get("/{name}")
    public String hello(String name) {
        return "Hello, " + name;
    }
}

Como o próprio nome indica, Micronaut é ideal para microsserviços e realmente tenta facilitar ao máximo sua vida ao desenvolvê-los. É possivelmente a estrutura de microsserviços mais ajustada para Java.

Veja também: Introdução ao Micronaut: uma estrutura Java nativa da nuvem.

Helidon

Vale a pena considerar o Helidon se você deseja seguir os padrões Java, estar pronto para a empresa e gostar de ter sua escolha de tipos de estrutura.

Helidon é o framework mais novo abordado aqui e um projeto oficial da Oracle. Ele foi projetado desde o início para threads virtuais e injeção de dependência em tempo de construção (semelhante ao Micronaut). Ele também adicionou recentemente recursos direcionados à IA.

A página inicial do Helidon.

Matthew Tyson

Helidon vem em duas variedades:

Helidon SE se assemelha ao Javalin, enquanto o Helidon MP é como o Quarkus em termos de filosofia e conjunto de recursos. A adoção de threads virtuais significa que foram dispensados ​​modelos de simultaneidade complicados, facilitando a compreensão e o gerenciamento de nós de aplicativos.

Aqui está um endpoint no Helidon SE:

import io.helidon.webserver.WebServer;
import io.helidon.webserver.http.HttpRouting;

public class Main {
  public static void main(String() args) {
    HttpRouting routing = HttpRouting.builder()
      .get("/hello", (req, res) -> res.send("Hello from InfoWorld!"))
      .build();

    WebServer.builder()
      .routing(routing)
      .port(8080)
      .build()
      .start();
  }
}

O recurso matador do Helidon é provavelmente o padrão Oracle e oferece a você a escolha do modelo, se você deseja fazer DIY mais simples com SE ou prefere uma estrutura opinativa e completa com MP.

Veja também: Os melhores frameworks de linguagem Java e JVM.

Conclusão

Java oferece uma ampla gama de opções para construir tudo na nuvem moderna, desde APIs simples até clusters sofisticados de microsserviços, implantações sem servidor e aplicativos full-stack. Cada uma das microestruturas Java discutidas neste artigo é sólida, portanto não há necessidade de se preocupar com a escolha. Você pode começar identificando um ou dois que parecem atender às suas necessidades, depois mergulhar no código e escolher aquele que lhe parece melhor. O bom dessas estruturas é que todas priorizam a experiência do desenvolvedor, cabendo a você decidir qual experiência de desenvolvedor é mais adequada para você.