Olá, tudo bem? Meu nome é João Victor e serei o instrutor no curso sobre Quarkus.
Audiodescrição: João Victor é um homem branco, de cabelo curto castanho, sobrancelhas castanhas e olhos castanhos. Ele veste uma camisa azul e está em um ambiente de escritório com uma parede clara ao fundo.
O Quarkus é um framework que vem ganhando cada vez mais espaço na comunidade entre as pessoas desenvolvedoras de software que utilizam Java, Kotlin e outras linguagens que usam a Java Virtual Machine (JVM).
O Quarkus é conhecido como Java Supersônico Subatômico porque tende a ser mais rápido que os demais frameworks, entregando respostas de forma mais rápida e iniciando de maneira mais ágil. É um framework muito bem cotado para ser usado em aplicações Cloud Native.
Neste curso, utilizaremos diversos recursos do Quarkus, desde suas extensões até extensões externas que o próprio Quarkus incorporou e melhorou.
Na IDE do IntelliJ, simularemos um sistema bancário, onde teremos um endpoint para cadastrar, remover e alterar agências bancárias - um sistema comum em empresas de fintech e outras que utilizam esse tipo de linguagem.
Teremos também a oportunidade de consumir alguns recursos REST. Utilizaremos recursos do Quarkus para consumir APIs e criaremos nossas próprias APIs usando o new RestClient
.
Haverá uma parte dedicada a testes, então, se você ainda não há muito conhecimento sobre teste de unidade, este é o momento de aprender. Implementaremos uma regra de negócio que permitirá realizar testes interessantes usando JUnit e Mockito.
Além disso, discutiremos sobre observabilidade, abordando log e métricas com Prometheus e Grafana. Inclusive, construiremos um dashboard interessante com métricas desenvolvidas ao longo do curso e também com métricas da aplicação.
Feito isso, ainda teremos a parte de deploy, onde utilizaremos o Docker Compose para subir a aplicação, integrando-a com o banco de dados, permitindo seu uso onde desejarmos.
É um conteúdo bastante interessante, com especificações que usamos no dia a dia no mundo Java e recursos utilizados em ambientes produtivos e em grandes empresas no Brasil e no mundo. Por isso, não deixe de participar deste curso.
Até o próximo vídeo!
Para começar a desenvolver nossa aplicação Quarkus, precisamos de um ambiente onde possamos criar nossas classes e todos os recursos necessários ao longo do curso.
O Quarkus nos fornece uma interface gráfica de configuração da aplicação para poder selecionar o nome da aplicação, as dependências que utilizaremos e a versão do Quarkus desejada. No momento da gravação, estamos na versão 3.16
, mas utilizaremos a versão 3.15
, que é uma versão LTS (long-term support). Basta escolher essa versão no dropdown na barra superior do site.
Podemos configurar todos os detalhes da aplicação no tópico "Configure your application":
- Group:
br.com.alura
- Artifact:
banking-service
- Build tool:
Maven
- Version:
1.0.0-SNAPSHOT
- Java Version:
21
- Starter Code:
No
Definimos o grupo como br.com.alura
e o nome da aplicação como banking-service
, pois criaremos uma aplicação para cadastro de agências bancárias. Também mantemos selecionado o Maven
como ferramenta de construção.
Além disso, definimos a versão do projeto como 1.0
, já que será a primeira versão do projeto e o Java na versão 21
. Configuramos o código inicial como No
, pois não queremos que inicie com nenhum código fornecido pelo Quarkus. Desenvolveremos toda a aplicação do zero.
No tópico "Start from an extensions preset", o Quarkus já oferece alguns modelos de dependências para criar a aplicação. Por exemplo, se quisermos uma aplicação com REST e serviço com banco de dados, ele já sugere as dependências necessárias.
Vamos usar isso como exemplo. Clicando no quadrante "REST service with database", encontraremos as seguintes dependências:
quarkus-rest
;quarkus-rest-jackson
;quarkus-hibernate-orm-panache
;quarkus-jdbc-postgresql
.Primeiro, precisamos do quarkus-rest
, pois teremos APIs REST na aplicação. Também precisamos de um desserializador, então usaremos o quarkus-rest-jackson
. Como utilizaremos um banco de dados, também utilizaremos o Panache, uma dependência própria do Quarkus, e o PostgreSQL.
Além dessas dependências, precisaremos do quarkus-micrometer
para trabalhar com métricas. No centro da tela, há uma barra de pesquisa onde digitamos "Micrometer" e selecionamos a primeira opção, "Micrometer Metrics".
Também precisaremos da dependência quarkus-rest-client-jackson
. Vamos procurá-la na barra de pesquisa e selecionar a opção "REST Client Jackson", que já traz o Serializador Jackson.
Com essas configurações de dependência (REST, REST Jackson, ORM, Panache, JDBC Driver, Micrometer e REST Client Jackson), estamos prontos para começar a aplicação.
No canto superior direito, clicamos no botão "Generate Your Application" (ou atalho "Alt + Enter") para fazer o download. Optamos por baixar o app compactado, clicando no botão "Download the ZIP".
No explorador de arquivos, acessamos a pasta de "Downloads" e copiamos o arquivo banking-service.zip
para a pasta "Workspace", onde desenvolveremos o projeto. Feito isso, podemos clicar com o botão direito e escolher a opção "Extrair tudo" para extrair a aplicação nessa pasta. Por fim, podemos apagar o ZIP.
Agora, podemos abrir a IDE. No menu superior do IntelliJ, selecionamos a opção "File > Open" e escolhemos a pasta banking-service
. Abrimos em uma nova janela, pois já temos outra aplicação aberta.
Podemos abrir a pasta "src" para conferir a estrutura de diretórios de um projeto Maven. Nela, encontramos o "main", que por sua vez, contém "docker", "java", "resources". Mas ainda não há nenhum código, pois pedimos para não gerar classes pelo Quarkus.
Agora, podemos subir a aplicação. No canto inferior direito, aparece um aviso "Maven Build Script Found". Clicamos no botão "Load" para mandar carregar e construir a aplicação. Devemos esperar enquanto todas as dependências são baixadas.
Com isso, aparece o ícone do Maven na barra lateral direita. A aplicação pode já mostrar esse ícone ou, como no nosso caso, pedir para fazer o load. Assim que resolvermos todas as dependências, poderemos subir a aplicação.
No painel de ferramentas do Maven, vamos expandir a parte do plugin para conferir um subplugin chamado quarkus
. Podemos expandi-lo clicando na seta à esquerda. Dentre uma série de outros subplugins, encontramos o quarkus:dev
. Esse modo é interessante, pois podemos clicar duas vezes nele para subir a aplicação.
A diferença é que, ao desenvolver e precisar alterar algo, podemos modificar o código sem parar e subir a aplicação novamente. As alterações refletem imediatamente ao fazer uma nova requisição, permitindo um desenvolvimento contínuo.
Clicamos duas vezes no quarkus:dev
, o que é suficiente para carregar a aplicação. Neste momento, não há nada desenvolvido, mas podemos verificar que a aplicação está funcionando, pois Quarkus possui uma página padrão de boas-vindas.
No terminal, podemos conferir todas as features instaladas, como REST, REST Client e REST Client Jackson. No navegador, acessamos a seguinte URL:
http://localhost:8080
Desse modo, acessamos uma interface do Quarkus que nos parabeniza por subir a primeira aplicação Quarkus.
A partir deste ponto, cabe a nós desenvolvermos o sistema de cadastro de agências. Neste vídeo, o objetivo era criar a aplicação. Nos próximos vídeos, começaremos o desenvolvimento da aplicação.
Agora que criamos nossa aplicação, chegou o momento de começar a desenvolver nossos recursos. Antes de adicionar uma agência via REST API, precisaremos fazer uma requisição para uma API externa para validar se essa agência está ativa ou não.
Para consumir uma API externa, utilizaremos o REST Client.
Voltando para nossa aplicação, podemos minimizar o menu do Maven, clicando no botão "Hide" canto superior direito (ou atalho "Shift + Escapa") e fechar a aba do arquivo pom.xml
, clicando em "Close" (ou atalho "Ctrl + F4").
Primeiro, vamos verificar o que essa API externa retorna. No Postman, vamos fazer uma requisição GET
para http://localhost:8181/situacao-cadastral
, teremos o retorno dessa API.
Retorno com status
200 OK
em 10ms:
[
{
"id": 1,
"nome": "Agencia BSB",
"razaoSocial": "Asa Norte AGENCIA BSB",
"cnpj": "15130254000100",
"situacaoCadastral": "ATIVO"
}
]
Ela retornará o nome da agência, a razão social, o CNPJ e a situação cadastral. Precisamos consumir essa API para validar se a agência está ativa ou não. Se não estiver ativa, faremos algum tratamento, por exemplo, não adicionar a agência ao nosso sistema.
Enum
para situação cadastralPrecisamos de um modelo na nossa aplicação banking-service
que contenha o nome, a razão social, o CNPJ e a situação cadastral para consumir esses dados.
Vamos voltar à IDE para começar o desenvolvimento da aplicação. No painel lateral esquerdo que contém a estrutura de diretórios do Maven, expandiremos os módulos. Em "src > main", há um diretório para o "docker", um para "java" e um para "resources".
No diretório "java", clicaremos com o botão direito e escolheremos as opções "New > Package" para criar um pacote chamado "br.com.alura.service.http".
Clicando no pacote recém-criado com o botão direito, vamos selecionar "New > Java Class" para criar um Enum chamado SituacaoCadastral
. A nomenclatura será PascalCase, ou seja, tudo junto e com "S" e "C" maiúsculos.
Definiremos dois tipos de situação cadastral: ATIVO
e INATIVO
.
SituacaoCadastral.java
:
package br.com.alura.service.http;
public enum SituacaoCadastral {
ATIVO, INATIVO
}
Agora, precisamos criar uma classe Java chamada AgenciaHttp
. Esta será nosso modelo para referenciar os dados retornados pela API. Precisamos traduzir a informação da API para nosso sistema, usando a classe AgenciaHttp
.
Vamos criar os mesmos campos que conferimos no Postman. Não precisamos mapear o ID, apenas o nome, a razão social, o CNPJ e a situação cadastral.
O nome
, a razao social
e o cnpj
serão strings, e a situacaoCadastral
será o enum SituacaoCadastral
que acabamos de criar. Todos serão variáveis privadas.
AgenciaHttp.java
:
package br.com.alura.service.http;
public class AgenciaHttp {
private String nome;
private String razaoSocial;
private String cnpj;
private SituacaoCadastral situacaoCadastral;
}
Com isso, temos o modelo da informação que retornará da API.
Agora, ainda dentro do pacote "http", precisamos criar uma interface Java chamada SituacaoCadastralHttpService
. Este será o serviço que permitirá à aplicação banking-service
fazer requisições para a API externa.
A primeira etapa é indicar que este serviço é um @RegisterRestClient()
. Precisamos informar à aplicação que este serviço é um REST Client. O Quarkus usa o MicroProfile para trabalhar com essas especificações, muito utilizado no mundo Java para aplicações cloud services.
Além disso, precisamos adicionar o path da aplicação. O path indicará qual requisição fazer para a API externa, ou seja, qual recurso acessar. Nesse caso, queremos cadastrar /situacao-cadastral
.
Por isso, acima do @RegisterRestClient()
, anotamos com @Path()
que utiliza uma especificação do Jakarta EE, passando o recurso que iremos acessar entre aspas duplas, /situacao-cadastral
. O host será configurado em outro momento.
Também configuraremos uma configKey
no @RegisterRestClient()
, que será útil ao configurar o host. Essa chave será chamada de situacao-cadastral-api
.
SituacaoCadastralHttpService.java
:
package br.com.alura.service.http;
import jakarta.ws.rs.Path;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
@Path("/situacao-cadastral")
@RegisterRestClient(configKey = "situacao-cadastral-api")
public interface SituacaoCadastralHttpService {
}
Criamos como uma interface, pois o Quarkus, no tempo de build, criará a implementação. Isso nos dá flexibilidade, pois não precisamos nos preocupar com a implementação.
O que a API vai nos retornar? Retornará informações que representaremos como AgenciaHttp
. O método que o serviço de banking-service
chamará para acessar a API externa retornará uma AgenciaHttp
, onde mapeamos esses dados.
Usamos o REST Client Jackson, pois, quando o sistema faz a requisição para a API, ele fará a serialização para uma AgenciaHttp
- sem precisar de conversão manual. Essas são as facilidades que o uso do Quarkus e suas dependências nos possibilita.
O nome do método será buscarPorCnpj()
, pois chamaremos pelo CNPJ para saber se uma agência está ativa. O método receberá o cnpj
como parâmetro, que será do tipo string.
Desse modo, antes de cadastrar a agência, chamamos buscarPorCnpj()
, que verificará se está ativa e responderá. Dependendo da resposta, cadastramos ou não.
Agora, explicitamos o @GET
, pois a requisição para o serviço que consumimos é um GET
, passando o CNPJ. Também precisamos definir um @Path
da API que consumimos, passando um placeholder que será cnpj
, entre aspas duplas e chaves.
import com.alura.agencias.domain.http.AgenciaHttp;
import jakarta.ws.rs.GET;
@Path("/situacao-cadastral")
@RegisterRestClient(configKey = "situacao-cadastral-api")
public interface SituacaoCadastralHttpService {
@GET
@Path("{cnpj}")
AgenciaHttp buscarPorCnpj(String cnpj);
}
Com isso, informamos que a requisição para cadastrar a agência na aplicação será um GET
, chamando /situacao-cadastral
e passando um CNPJ.
Agora que criamos a interface SituacaoCadastralHttpService
, que o próprio Quarkus vai configurar, precisamos retornar a AgenciaHttp.java
.
Vamos criar os métodos GET
, com a ajuda do IntelliJ, para recuperar essas informações. Basta digitar get
e usar o autocompletar para criar um getNome()
, getRazaSocial()
, getCnpj()
e getSituacaoCadastral()
.
AgenciaHttp.java
:
public String getNome() {
return nome;
}
public String getRazaoSocial() {
return razaoSocial;
}
public String getCnpj() {
return cnpj;
}
public SituacaoCadastral getSituacaoCadastral() {
return situacaoCadastral;
}
Como a aplicação saberá que deve chamar a API em http://localhost:8181
? Configuraremos no arquivo application.properties
, que o Quarkus já forneceu, dentro do diretório "resources".
No application.properties
, cadastramos o host da API quarkus.rest-client.situacao-cadastral-api
. É por isso que criamos um configKey
no serviço. Sem essa chave, precisaríamos passar o full qualified name, ou seja, o nome completo da classe de serviço - o que ficaria muito longo.
Falta apenas colocar .url
que será igual a http://localhost:8181
.
application.properties
:
quarkus.rest-client.situacao-cadastral-api.url=http://localhost:8181
Com isso, a aplicação banking-service
está pronta para chamar a API externa. Configuramos o host e o Quarkus, no momento de build, implementará a interface de serviço e fará a requisição HTTP para utilizarmos os dados.
No próximo vídeo, iremos criar a API para cadastrar a agência.
O curso Java e Quarkus: desenvolva aplicações Cloud Native possui 157 minutos de vídeos, em um total de 47 atividades. Gostou? Conheça nossos outros cursos de Java em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.