Comunidade do Estágio
Comunidade do Estágio
Você procura por
  • em Publicações
  • em Grupos
  • em Usuários
loading
VOLTAR

Construção de uma aplicação para controlar endereços de usuários utilizando uma arquitetura API REST

Construção de uma aplicação para controlar endereços de usuários utilizando uma arquitetura API REST
Luiz Paulo Caldas de Faria
ago. 18 - 8 min de leitura
000

1: Objetivo do projeto: Expor funcionalidades da nossa aplicação para outros softwares (Software Consumidor). Esses softwares poderão utilizar essa funcionalidades via internet. Assim, teremos que construir uma API para servir de interface para que essas funcionalidades sejam consumidas.

2: Lista de Funcionalidades da aplicação:
 * Cadastrar Usuários: (Nome, E-mail, CPF, Data Nascimento)
*  Cadastrar Endereços desses Usuários: (Logradouro, Número, Bairro, Complemento, Cidade, Estado e CEP)
*  Listar Usuários juntamente com seus Endereços

3: Tecnologias do Spring envolvidas na aplicação:
Spring Tools Suite 4, Spring Boot, Spring Data JPA, Spring Dev Tools, Spring Web, Validation do Jakarta EE

4: Por que Spring? Spring é um ecossistema de frameworks e ferramentas que auxiliam e automatizam nas mais diversas tarefas no desenvolvimento do projeto.

5: Criação do Projeto da na IDE:  Spring Tools Suite 4

Por que o Spring Tools Suite 4 (STS)?
Escolhida pois, é uma IDE amigável, parecida com o Eclipse e desenvolvida pela equipe do Spring. É um eclipse tunado e que oferece diversos recursos.

Exemplo de benefícios do (STS): Velocidade para o desenvolvimento, pois temos um assistente para adicionar e remover recursos para nosso projeto. Cada recurso adicionado é registrado automaticamente por padrão no pom.xml (arquivo do Maven, o gerenciador dependência).

Detalhes de algumas ferramentas:

6: Spring Boot:

Benefício: Não precisarei de instalar um servidor de aplicação tomcat, na verdade, o Apache Tomcat é um container Web baseado em Java com o objetivo de executar aplicações Web.

Benefício: Só precisarei adicionar uma configuração no arquivo pom.xml do Maven e pronto, é só clicar em executar a aplicação e o Spring boot que irá realizar o deploy de aplicação (executando a aplicação) em poucos segundos.

Benefício: Arquivo pom.xml do Maven reduzido.

Exemplo: Quando registrar no pom.xml que precisa de utilizar tecnologias para persistir dados no banco, precisa-se de: JPA, Hibernate, EntityManager e etc.

Utilizando o Spring Boot, não é necssário colocar nenhuma dessas configurações, só basta adicionar 1 dependência no pom.xml: spring-boot-starter-data-jpa, com isso o Spring Boot irá baixar todas dependências necessárias.

7: Spring Data JPA: Adicionando o Spring Data JPA facilmente via assistente da própria IDE, o projeto já estará habilitado a utilização de interfaces que nos ajudará na utilização do banco de dados.

8: Spring Dev Tools: Iremos utilizar o Dev tools pois, quando alteramos alguma classe do nosso projeto o Spring Dev Tools irá realizar o reload da nossa aplicação automaticamente, assim, não precisaremos parar e iniciar o servidor de aplicação quando realizarmos alguma alteração no projeto.

9: MySQL: Banco de dados open source, seguro e fácil. Se faz necessário adicionar o driver via assistente STS e configurar o arquivo application.properties para indicar as parametrizações de acesso ao banco

10: Criando Entidades do Projeto e mapeando de acordo com a especificação JPA e Bean Validation: Dentro do pacote Domain, iremos criar uma pacote chamado Model. No pacote model iremos adicionar a entidades do projeto, seguindo definições DDD e dentro do domain o pacote chamado model:

Entidade Usuario e Endereco foram registradas e anotadas seguindo a especificação. @NotBlank simbolizando campos não branco e @Size informando o tamanho permitido limitador no banco.

Na entidade Endereco, devemos registrar o annotation @ManyToOne da especificação JPA para informar ao Spring que Existem diversos Endereços para somente 1 Usuário.

Adicionamos também os métodos de visibilidade get’s and set’s pois os atributos são privados.

11: Criando Repositórios JPA para acesso a interfaces do banco de dados: (Endereco e Usuario) Vamos criar uma interface responsável para interagir com o banco de dados, para isso iremos utilizar o Spring Data JPA que nos fornecerá em tempo de execução a implementação do Hibernate.

Iremos colocar no pacote: domain, dentro da pasta repository:


Anotamos a interface como um componente do Spring @Repository.

Criamos o método que irá buscar por e-mail ou por CPF.

Este método irá nos ajudar quando utilizarmos a verificação, se existe um e-mail ou CPF já registrado para algum usuário. Caso exista, não deixaremos cadastrar um novo usuário.

12: Criando Serviços que utilizará os repositórios para utilização do banco de dados:

A camada service, servirá pra regra de negócio e utilização do repository(interface com o banco de dados), assim, os services serão utilizados nos controller’s, camada onde registrará os endpoints da aplicação. Poderia delegar o uso dos repository para camada controller mas, nesse modelo dividiremos a reponsabilidade da classe controladora de endpoints.

13: Adicionando o Flyway no projeto:

Para criar as tabelas, estruturas do banco, iremos utilizar uma ferramenta de versionamento e controle do banco de dados. Bem fácil a instalação, inclusive a IDE STS, já disponibiliza a ferramenta no próprio assistente.

Poderia estar criando as tabelas a partir das entidades mapeadas pela configuração spring.jpa.hibernate.ddl-auto=auto pelo arquivo application.properties mas, seguiremos via versionamento de scripts utilizando o Flyway, que nos permitirá gerenciar o scripts que já foram executados no banco de dados.

Para visualizar as rotinas do banco, tudo que está sendo buscado e gravado no banco dados, adicionamos propriedades do Hibernate habilitada.

14: Criando classes para Transferência de Dados utilizando o padrão Data Transfer Objetc (DTO):

Além do projeto conter as entidades no Domain Model, se faz necessário criamos um modelo de representação (Representation Model) dessas entidades. Assim, conseguiremos escolher a apresentação que será exporta ao usuário. Por exemplo, a ordem dos atributos, nesse caso: quando a resposta chegar ao software consumidor, o nome do usuário será apresentado primeiramente na lista da resposta.
Outro exemplo: Na entidade de representação que será transferida via resposta, UsuarioRepresentation, decidimos não apresentar o código do usuário ao cadastrar um novo usuário, assim, não necessita do id do usuário.

15: Adicionando o ModelMapper no projeto: O ModelMapper irá nos ajudar realizar de forma automática a conversão da entidade de Domínio para entidade de Representation model (DTO), reduzindo linhas de código e tempo na construção das nossas classes controladoras.

Criamos um pacote para registrar a configuração do ModelMapper pois o mesmo exige essa classe. Esta classe será anotada como @Configuration, para que o Spring entenda que é um componente gerenciável. E o método de instancia da classe ModelMapperConfiguration como @Bean, permitindo assim à instanciação do objeto nas classes utilizadoras, que nesse caso, será as classes controladoras do endpoint’s.

16: Criando Controladores para os endpoint’s da aplicação: O controlador servirá na exposição das funcionalidades para o software consumidor.

Neste momento criamos o método que servirá para realizar o cadastro do Endereço.

Realizamos a conversão de Entidade de Dominio para Entidade de Representação utilizando o ModelMapper injetado, trazendo benefícios de redução de código.

No controlador de endereço, dividimos algumas responsabilidades e criamos um JavaDoc, deixando fácil o entendimento para outros desenvolvedores.

Criei um método que só servirá para converter os tipos de objetos e no método de cadastrado de usuário, o mesmo foi utilizado.

Na imagem não foi apresentada o get’s and set’s, hash e equals mas, os mesmos foram criados.

17: Evidenciando o funcionamento da API (localmente): Para evidenciar o funcionamento, utilizamos um software que realiza requisições para API.

Criação de Usuário: Código 201 criado. Perceba que não foi retornado o id do usuário, pois a entidade UsuarioRepresentation não contém o atributo.

Criação de Endereço: Código 201 criado.
Criação de Endereço: Código 404 retornado. “Bad Request”. O campo logradouro não foi preenchido.
Criação de um segundo endereço para o usuário de teste e apresentando o usuário e seus endereços:

Listagem de Endereço do Usuário Especifico: Código 200 OK

Visualização no banco de dados:
Usuário:

Endereço:

 


Denunciar publicação
    000

    Indicados para você