Treinamento com duração de 68 horas proporcionado pela Digital Innovation One (DIO) e pelo Banco Santander. O objetivo é aprender mais sobre desenvolvimento backend voltado a Kotlin e Java, Spring Framework, além de diversas outras tecnologias e arquiteturas.
Projeto Prático de Application Programming Interface (API) com Spring Boot, Gradle, Kotlin e Banco de Dados H2 💻
Github do projeto "Credit Application System", Application Programming Interface (API) Full Representational State Transfer (RESTful) utilizando Spring Boot e Kotlin que simula um sistema de análise e solicitação de crédito. O objetivo é a empresa fornecer gerenciamento simples de Crédito (Credit) para seus Clientes (Customers).
- Conceitos de metodogias ágeis e tradicionais;
- Versionamento e diversos recursos do Git e Github via linha de comando;
- Contrução de arquivos markdown (.md);
- Contribuindo para um projeto open source através do Fork e Pull Request.
- Estrutura de controle de fluxo e coleções;
- Orientação a objetos e tipos de classes;
- Funções;
- Tratamento de exceções.
- Singleton;
- Builder;
- Adapter;
- Extension function;
- Processamento paralelo / assíncrono.
- Banco de dados relacionais;
- Banco de dados não relacionais.
- Gerenciamento de dependências e build em Java com Apache Maven;
- Imersão no Spring Framework com Spring Boot;
- Criando uma API REST documentada com Spring Web e Swagger;
- Adicionando segurança a uma API REST com Spring Security;
- Arquitetura orientada a eventos com Java, Spring Boot e Kafka;
- Explorando padrões de projetos na prática.
- Contextualizando o desenvolvimento web com Spring Boot 3;
- Documentando e testando sua API REST com Kotlin.
Spring Framework é um ecossistema de desenvolvimento para facilitar a criação de aplicações Java e Kotlin utilizando diversos módulos independentes. Como consequência, me aprofundei em estruturas internas do Java como:
- Java Persistence Application Programming Interface (JPA);
- Object-Relational Mapping (ORM);
- Java Enterprise Edition Database Connectivity (JDBC);
- Java Enterprise Edition (Java EE).
No entanto este Bootcamp focou nas tecnologias:
- Apache Kafka;
- Apache Maven;
- Gradle;
- Spring Boot;
- Spring Security;
- Spring Data JPA;
- Hibernate;
- Flyway;
- Swagger;
- Git / Github.
Ademais, na construção da API, implementamos a Arquitetura em Três Camadas do Spring (camadas Controller, Service, Persistence / Repository) e estruturas como:
- Data Access Object (DAO);
- Data Transfer Object (DTO).
Contextualizando, de forma breve, todas tecnologias descritas nos parágrafos anteriores…
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. Gradle realiza operação semelhante, porém bastante utilizado com a linguagem Kotlin.
Apache Kafka é uma plataforma para coletar, processar e armazenar dados de streaming permitindo trabalhar com conceitos de tópicos e filas fornecendo sincronização e desacoplamento de dados em microsserviços.
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.
Gabriel Ferreira |
---|