Criando uma aplicação REST com Eclipse Vert.x
Neste post veremos como podemos utilizar o Eclipse Vert.x para criarmos uma api rest rapidamente.
Esse é o sexto post sobre o assunto de micro framework, outros post sobre o mesmos podem ser vistos aqui :
- Criando uma aplicação REST com Javalin
- Criando uma aplicação REST com SparkJava
- Criando uma aplicação REST Helidon
- Criando uma aplicação REST com Jooby
- Criando uma aplicação REST com Pippo
Para esse post criaremos 2 simples endpoints (get /post) utilizando as seguintes libs e recursos:
Introdução ao Eclipse Vert.x
O Eclipse Vert.x é uma estrutura de aplicativo orientada a eventos poliglota que é executada na Java Virtual Machine.
O Vert.x possui os seguintes recursos :
- Poliglota. Os componentes do aplicativo podem ser escritos em Java, JavaScript, Groovy, Ruby, Scala, Kotlin e Ceylon.
- Modelo de simultaneidade simples. Todo o código é single threaded, liberando-se do incômodo da programação multi-threaded.
- Modelo de programação assíncrona simples para escrever aplicativos não bloqueadores verdadeiramente escaláveis.
- Barramento de eventos distribuído que abrange o lado do cliente e do servidor. O barramento de eventos até penetra no JavaScript do navegador, permitindo criar os chamados aplicativos da Web em tempo real.
- Modelo de ator e repositório público, para reutilizar e compartilhar componentes.
Vejamos um simples Hello-World com Vert.x :
agora no navegador basta usar http://localhost:8080/ e pronto. Simples não ?
Bem feita essa rápida introdução sobre o framework, vamos partir para construção do nosso projeto .
Maven Dependencies
Aqui temos duas mameiras de criarmos um projeto Vert.x, uma atraves do (https://start.vertx.io/) bem similar ao do Spring boot e do MicroProfile.
A outra forma é adicionar as dependencias manualmente conforme o pom.xml a seguir :
Aqui nesse pom.xml adicionamos duas dependencias do vert.x a CORE e a WEB e por default o servidor é o netty .
Além disso adicionamos alguns plugins para gerar nosso jar e importar as libs extras da nossa pequena aplicação .
Criando as Classes
A primeira classe que iremos criar é a Main :
essa é a nossa Classe que vai fazer um start na nossa aplicação , essa classe é bem simples .
Nas linhas 22 e 23 defini um Opcional para uma porta que o seu valor será pego pela variável de ambiente da Oracle Cloud e um LOG .
Da linha 27 a 33 pertence ao Apache DeltaSpike utilizando o container CDI que pode ser visto aqui :(https://deltaspike.apache.org/documentation/container-control.html) .
As linhas 35 e 36 pertence ao CORE do vert.x, a primeira cria uma instancia de Vertx não clusterizada, enquanto a segunda faz um deploy de um vertice(verticles) que no nosso caso é a Classe Main que esta herdando da classe abstrata AbstractVerticle .
As linhas 38 e 39 pertence ao módulo web do vert.x , que no caso estamos usando rotas(Router) que recebem requisições HTTP e com essas rotas que construimos o nosso endpoint de nossas aplicações Rest como em qualquer outro framework visto nos artigos acima e no Spring Boot .
A rota pode ter um manipulador associado a ela, que então recebe a solicitação, que é demostrada na linha 39, onde o BodyHandler permite recuperar corpos de solicitações, limitar tamanhos de corpo e manipular uploads de arquivos.
Ainda na parte de rotas temos na linhas 41 a 46 nossa primeira rota/endpoint com o metodo HTTP GET cujo a função é retornar todos os dados do banco de dados e em formato de Json .
Em seguida temos o segundo endpoint/rota para criarmos um conteúdo via Json da linha 48 a 56 com método HTTP POST onde passo um Json decode e um handle como explicado acima, no caso pegando o corpo como String.
Em seguida o conteúdo é salvo utilizando o DeltaSpike data e depois é devolvida uma resposta em formato Json contendo um código e uma mensagem de sucesso.
Apos isso, basta roda a Main e acessar o endpoint http://localhost:8080/api/events para ver o conteúdo inicial conforme a imagem :
esses valores foram carregados assim que subimos a nossa aplicação, sendo que os valores estão sendo lidos de um arquivo txt e armazenados no banco de dados .
Agora o passo final é subir para um provedor de Cloud através do TerraForm, no caso eu optei pela plataforma da Oracle Cloud, por possuir conta na mesma.
Deploy na Oracle Application Container com TerraForm
Nesta parte faremos um deploy do nosso jar para a Oracle cloud, para isso o leitor(a) precisa ter uma conta Oracle Cloud, você pode usar o seguinte post para se familiarizar com o serviço Oracle Application Container.
Terraform permite criar, alterar e melhorar a infraestrutura de forma segura e previsível. É uma ferramenta de software livre que codifica APIs em arquivos de configuração declarativa que podem ser compartilhados entre os membros da equipe, tratados como código, editados, revisados e versionados.
Podemos fazer o download o TerraForm aqui e configura o mesmo aqui .
e vamos configurar um arquivo para provisionar toda a infraestrutura para fazer deploy para a Oracle .
Aqui vamos utilizar dois provider que o TerraForm oferece para o Oracle Cloud que são :
abra um editor de texto de sua preferencia e crie o seguinte arquivo dentro do nosso projeto :
além disso crie também um manifest.json com o seguinte conteúdo :
e crie um arquivo bash chamado run.sh, esse script irá automatizar o build do nosso projeto e também executar o TerraForm para criar a infraestrutura :
bastando acessar a URL apresentada e ao final adicionar os Eventos.
Bem isso é tudo, espero que os leitores tenham gostado de conhecer um novo framework para construções de serviços Rest rapidamente .
Código fonte =https://github.com/Daniel-Dos/DanielDiasjava-Blog/tree/master/Projeto-Cloud/vertx