Prévia do material em texto
Construção de uma API com
Spring Boot
2º Semestre
Prof. M.Sc. Stefano B. B. R. P. Mathias
Aplicações de Linguagem de Programação Orientada a Objetos
AULA 13
Objetivos:
Construir uma API com Spring Boot.
Tópicos
• Introdução
• Instalação
• API
• MVC e OO
• Repositório
• Controladora
Tópicos (cont...)
• Visualizar os comandos SQL
• Executar a aplicação
• Construir um JAR único para a API
Introdução
• Ao longo das últimas aulas, foram abordados diversos assuntos que
estão conectados e que servirão para o conteúdo dessa aula.
• O padrão MVC Web foi apresentado, juntamente com a arquitetura
de múltiplas camadas.
• Além disso, o JBDC e o Hibernate foram explicados para que a
persistência dos dados possa ser realizada.
• Com todos esses tópicos apresentados, a partir essa aula o objetivo é
construir uma API em Java que irá utilizar tudo que foi visto até aqui.
Introdução (cont...)
• Para construir essa API será deixarmos de utilizar o NetBeans e o
Eclipse será utilizado no lugar. Além disso, também será necessário a
instalação do Spring Boot (dentro do Eclipse).
• Em resumo, o Spring Boot é uma ferramenta que simplifica o
desenvolvimento de aplicativos Java, permitindo que foquemos na
lógica de negócios do aplicativo, em vez de gastar tempo em
configurações complexas e detalhes de infraestrutura.
Instalação
• Entrar no site do Eclipse e baixar o instalador.
• Após instalar o Eclipse, será necessário instalar o Spring Boot.
Instalação (cont...)
API
• Uma API (Interface de Programação de Aplicativos) é um conjunto de
regras e métodos que permitem que diferentes softwares se
comuniquem e interajam, permitindo o acesso controlado a
funcionalidades ou dados de um aplicativo por outro. Isso possibilita
a integração eficiente entre sistemas distintos.
• A API que iremos construir deverá ser capaz de cadastrar um cliente
e poder consultar os clientes cadastrados.
API (cont...)
• Para criar um projeto, basta ir em “File -> New -> Other”.
• Depois ir na pasta “Spring Boot -> Spring Started Project”
API (cont...)
• Definir o nome do projeto e selecionar
o “Type” com a opção “Maven”.
• O Maven é um gerenciador de
dependências que já foi visto
anteriormente.
• Clicar em “Next”
API (cont...)
• Buscar os pacotes que estão
destacados em vermelho na seção
“Avalieble”.
• H2: pacote com um SGBD de memória.
• Spring Data JPA: para ser possível
utilizar anotações nas classes para as
persistências de dados.
• Spring Web: disponibiliza recursos para
a construção de aplicações Web (MVC
etc.).
MVC e OO.
• O primeiro passo é construir a nossa entidade Cliente e com ela,
também adicionar as anotações do JPA para que seja criada uma
tabela em nosso banco de dados.
• As anotações @Entity, @Id, @GeneratedValue e @Column são do
JPA e já foram vistas em aulas anteriores.
• Note que foi preciso utilizar o conceito de encapsulamento e que a
classe foi organizada em um pacote chamado “Model”.
• Foi criado um pacote para separar as classes de “modelo” da
aplicação.
MVC e OO. (cont...)
Padrão Repositório
• De acordo com Eric Evans em seu livro Domain-Driven Design, o
“repositório é um mecanismo para encapsular o banco, recuperar e
buscar comportamento que simulam uma coleção de objetos.“
• O Padrão Repositório foi popularizado por Martin Fowler em 2002
no livro "Patterns of Enterprise Application Architecture". Ele propôs
esse padrão para organizar o acesso a dados de forma desacoplada
e orientada a objetos, melhorando a estrutura e testabilidade das
aplicações.
• Em outras palavras, o repositório também lida com dados e esconde
queries de forma semelhante ao padrão DAO. Porém, o repositório
se trata de uma padrão de alto nível, ou seja, muito mais próximo da
lógica de negócio de uma aplicação.
Padrão Repositório (cont...)
• O próximo passo é criar uma interface e faze-la herdar de
“JpaRepository”.
• Além disso, é necessário adicionar a anotação “@Repository”
(pertencente ao Sprint) para indicar que essa interface é um
repositório.
• Foi criado um pacote para separar as classes de “repositório” da
aplicação.
Padrão Repositório (cont...)
Controladora
• O último passo é criar uma classe que será a “controller” da API. Por
meio dela é que um cliente poderá ser incluído e os clientes
existentes poderão ser consultados.
• Também foi criado um pacote para que as classes de controller
fiquem agrupadas.
• A anotação “@RestController” indica que a classe é uma
controladora.
• A anotação @RequestMapping("") indica a rota base da aplicação. As
rotas não poder colidir, ou seja, ter nomes repetidos.
Controladora (cont...)
• Dentro do controller será necessário uma instância do repositório.
• Uma novidade é que não será preciso invocar o construtor da classe.
Basta colocar a anotação “@Autowired” na propriedade que uma
instância da classe será gerada automaticamente.
Controladora (cont...)
• Agora é necessário criar um método para retornar os clientes
cadastrados.
• Quando a anotação “@GetMapping” for incluída no método, quando
uma requisição do tipo “GET” for feita na rota desse controller, esse
método será chamado.
• Dentro do método utilize a instância do repositório e chame “findAll”
do mesmo.
Controladora (cont...)
• Agora é necessário criar um segundo método para cadastrar um
cliente.
• Quando a anotação “@PostMapping” for incluída no método,
quando uma requisição do tipo “POST” for feita na rota desse
controller, esse método será chamado.
• Dentro do método utilize a instância do repositório e chame “save”
do mesmo.
• Também utilize a anotação “ResponseStatus” para retornar o código
201 (CREATED) quando um cliente for cadastrado com sucesso.
Controladora (cont...)
• Utilize a anotação “@RequestBody” dentro dos argumentos de
entrada do método para indicar que as informações do cliente virão
no corpo da requisição.
Visualizar os comandos SQL
• Para visualizar os comandos SQL que a API está realizando, basta
abrir o arquivo “application.properties” e configurar a opção
“spring.jpa.show-sql=true”.
Executar a aplicação
• Para executar a aplicação, basta selecionar a aba “Boot Dashboard”,
clicar na seta ao lado de local, selecionar o nome do projeto e depois
clicar no ícone destacado abaixo.
Executar a aplicação (cont....)
• A aplicação está sendo executada localmente na porta 8080.
Testar a aplicação
• Para testar a inclusão de um cliente, a ferramenta POSTMAN será utilizada.
• É possível instalá-la no computador ou utilizá-la online. Como a API está local, os
exemplos estão utilizando a versão instalada.
• Crie uma requisição e marque o verbo dela como POST, coloque o endereço
“localhost:8080/Cliente”.
• Na aba “Headers”, inclua uma linha com a key igual a “Content-Type” igual a
“application/json” (isso indica que as informações serão passadas em formato
JSON).
• Na aba “Body”, marque a opção “raw” e preencha os dados do cliente no
formato JSON.
Testar a aplicação (cont...)
• Note que a inclusão foi feita com sucesso e por isso o código de
retorno é 201 e o objeto de retorno mostra a propriedade “Id”
preenchida.
Testar a aplicação (cont...)
• Para testar os clientes cadastrados basta criar uma requisição e
marque o verbo dela como GET, coloque o endereço
“localhost:8080/Cliente”.
• A requisição foi executada com sucesso e por isso o código de
retorno é 200. E os dados retornados foram a lista de clientes
cadastrados.
• Mesmo que não houvessem clientes cadastrados a requisição iria retornar 200, pois não houve nenhum erro na execução
da mesma.
Construir um JAR único para a API
• Para compilar a aplicação e gerar um arquivo JAR único, basta clicar
com o botão direito sobre o arquivo do projeto, selecionar a opção
“Run as” e depois a opção “4 – Maven Build”.
Construir um JAR único para a API (cont...)
• Preencher o campo “Goals” com “clean package” e clicar em “Run”.
Construir um JAR único para a API (cont...)
• Observe que foi gerado um arquivo JAR (destacado abaixo). Esse
arquivopode ser executado no computador com o Eclipse fechado e
a API irá funcionar, pois a mesma está sendo executada devido a esse
processo recém realizado.
Referências
• Documentação do JpaRepository: https://docs.spring.io/spring-
data/jpa/docs/current/api/org/springframework/data/jpa/repository/Jp
aRepository.html
• Documentação da anotação Repository:
https://www.digitalocean.com/community/tutorials/spring-repository-
annotation
• Diferença entre DAO e Repository:
https://www.baeldung.com/java-dao-vs-repository
https://www.dio.me/articles/ddd-a-diferenca-entre-dao-e-repository
https://dev.to/diariodeumacdf/padroes-dao-e-repository-13nj
Projeto implementado:
https://github.com/bluyus/AulasALPOO/tree/master/AulaSpringBootApi