Application Programming Interface (API) Full Representational State Transfer (RESTful) desenvolvida utilizando Spring Boot, Kotlin e Banco de Dados H2 que simula um sistema de análise de crédito. O objetivo é a empresa fornecer gerenciamento simples de Crédito (Credit) para seus Clientes (Customers).
No Terminal / Console:
- Faça um clone do projeto na sua máquina:
git clone [email protected]:GabesSeven/credit-application-system.git
- Entre na pasta raiz do projeto:
cd credit-application-system/
- Execute o comando:
./gradlew bootrun
- Em um navegador, utilize a Uniform Resource Locato (URL) para ter acesso ao Banco de Dados H2:
http://localhost:8080/swagger-ui/index.html
username: gabes
password: gabes - Em um navegador, utilize a URL para ter acesso a documentação e testes dos endpoints com Swagger:
http://localhost:8080/h2-console/
- Cadastrar:
- Request: firstName, lastName, cpf, income, email, password, zipCode, street
- Response: String
- Editar cadastro:
- Request: id, firstName, lastName, income, zipCode, street
- Response: firstName, lastName, income, cpf, email, income, zipCode, street
- Visualizar perfil:
- Request: id
- Response: firstName, lastName, income, cpf, email, income, zipCode, street
- Deletar cadastro:
- Request: id
- Response: sem retorno
- Cadastrar:
- Request: creditValue, dayFirstOfInstallment, numberOfInstallments, customerId
- Response: String
- Listar todas as solicitações de emprestimo de um cliente:
- Request: customerId
- Response: creditCode, creditValue, numberOfInstallment
- Visualizar um emprestimo:
- Request: customerId, creditCode
- Response: creditCode, creditValue, numberOfInstallment, status, emailCustomer, incomeCustomer
Diagrama Unified Modeling Language (UML) Simplificado de uma API Credit Application System
Uma das principais características do Spring Framework é a Inversion of Control (IoC) que permite que o Spring Container gerencie a criação e injeção de dependências entre os componentes, reduz o acoplamento entre classes e torna o código flexível e fácil de manter. O Spring “inverte o controle” das instâncias das mãos do programador através da palavra “new” para o agente externo a sua classe.
Dependency Injection (DI), uma forma de IoC, onde as dependências de um componente são fornecidas externamente, tornando o código modular e facilitando testes.
A Interface ApplicationContext é responsável por gerenciar objetos Bean, isto é, uma classe que determina como Spring Container gerenciará o ciclo de vida de suas instâncias, não necessitando realizá-las via código. Beans podem ser implantados de maneira personalizada ou em seis escopos: singleton, prototype, request, session, application, websocket.
Apache Maven é uma ferramenta de automação e gerenciamento de projetos Java.
Spring Boot reduz a necessidade de configurações iniciais e possibilita a construção de aplicações funcionais de maneira rápida e robusta, o boilerplate das configurações (seções de código que devem ser incluídas em muitos lugares) se localizam nos Starters que são dependências que adicionamos aos projetos.
De maneira quase análoga, o Spring Security fornece autenticação, autorização e outros recursos de segurança para aplicativos.
Swagger é para muitos o “queridinho” substituindo o Postman. Além de gerar requisições, também gera documentação dos endpoints.
Arquitetura de Três Camadas do Spring é segmentado entre as camadas: Controller (Controle), Service (Serviço), Persistence / Repository (Persistência / Repositório). Esta arquitetura promove modularização, melhor manutenção e escalabilidade. As boas práticas recomendam que a camada de Controle não deve conhecer particularidades de acesso a dados, responsabilidade delegada a outra camada separada e independente. Os softwares executados em camadas distintas são substituídos, atualizados e corrigidos sem prejuízo para o sistema como todo. As camadas podem ser desenvolvidas em paralelo.
A camada de Controle recebe e devolve as solicitações Hypertext Transfer Protocol (HTTP) do cliente, deve ser extremamente leve e somente delegar serviços (entrada e saída). Conforme apropriado, a Controle é responsável pela visualização, pelo transporte e pelos protocolos. Isso pode ou não incluir o mapeamento de Business Logic em JavaScript Object Notation (JSON), Extensible Markup Language (XML), HyperText Markup Language (HTML), entre outros. Mas a principal camada responsável pelo mesmo é a Service. Intermediando a Controle e o cliente está o DTO.
DTO é um padrão de arquitetura de objetos que agrega e encapsula dados para transferência. Não possui qualquer tipo de comportamento, sua função é obter e armazenar dados. DTO filtra quais dados serão transmitidos reduzindo a latência, também auxilia na não exposição de todos os dados presentes na Persistência.
A camada de Serviço realiza operações e se necessário requisita a camada de Persistência e retorna o resultado à Controle. Na Serviço estão presentes as Business Logic, ou seja, objetos que fazem o trabalho que o aplicativo precisa para o domínio o qual está associado. Envolve cálculos baseados em insumos e dados armazenados, validação de quaisquer dados provenientes da Controle e exatidão em quais dados da lógica de origem serão despachados.
Serviços são implementados através de Beans (@Service ou @Component, exemplos de anotações) que são gerenciados pelo Spring através de anotações, sendo necessário injetar todas as dependências de serviços para o trabalho “pesado”. Os objetos em Service podem ter o objeto DAO como dependência, tudo é objeto em Java, referenciando-se em C++, a linguagem Java implementou a Programação Orientada a Objetos (POO).
A camada de Persistência, de Repositório ou de Posições, formada pela estrutura DAO, fornece uma camada dupla de segurança a acesso a dados, independente do protocolo utilizado. Em outras palavras, design que cria uma camada separada e encapsula a lógica relacionada ao banco de dados, por exemplo, Create, Read, Update, Delete (CRUD) ou mecanismo de armazenamento subjacente. Auxilia a não relacionar classes do aplicativo do lado do Cliente com possíveis mecanismos de persistência (acesso a banco de dados que resulta na “quebra” da tríade da Segurança da Informação - Confiabilidade, Integridade e Disponibilidade). Também abstrai a implementação de acesso a dados subjacente para objetos Services e permite o acesso transparente à fonte de dados.
DAO encapsula e gerencia a lógica para recuperar, salvar, atualizar e deletar dados em seu armazenamento persistente (DAO encapsula e gerencia Relational Database Management System (RDBMS), NoSQL, sistema de arquivos) ou serviço comercial acessado via Representational State Transfer (REST) / Full Representational State Transfer (RESTful) ou Simple Object Access Protocol (SOAP).
Em uma pasta separada denominada “entity”, constrói-se as tabelas utilizando anotação @Entity. Normalmente na Persistência, usa-se a interface JPA Repository que trabalha com JPA ou outra Framework ORM. Essas tecnologias possuem padrões que permitem criar as classes de dados independentemente da fonte de dados: Banco de Dados Relacional, arquivo texto ou XML. Além de encapsular osmecanismos de acesso a dados, criando uma interface de cliente genérica e permitindo independência no software.
Spring Data JPA é uma framework relacionada ao projeto Spring Data e possui como finalidade tornar a integração de aplicações Spring com a JPA cujo escopo envolve gerenciar a implementação do ORM, ou seja, camada intermediária ao JDBC, parte do contêiner Java EE que gerencia as conexões com o banco de dados. ORM, técnica para aproximar o paradigma de POO ao paradigma do RDBMS.
Hibernate implementa a especificação JPA e Flyway é uma ferramenta responsável por versionar a base de dados. Permite sincronizar o banco de dados com a versão da aplicação, analisar registros de logs (scripts Structured Query Language - SQL) executados ou não, automatização com scripts, criar novo banco de dados, executar rollback de mudanças no banco de dados.
Arquitetura em 3 camadas Projeto Spring Boot
Gabriel Ferreira |
---|