REST, Java, Spring Boot 1

API REST com Java e Spring Boot (Parte 1)


Um passo a passo para você aprender a fazer uma API REST com Java e Spring Boot do começo ao fim — Parte 1: Preparando o ambiente


Nesta série de artigos criaremos um passo a passo, com certo grau de detalhamento, sobre como desenvolver uma API REST utilizando Java e Spring Boot. Nesta primeira parte, introduziremos uma parte teórica sobre REST e mostraremos quais ferramentas serão usadas.

Ferramentas utilizadas em um RESTful Web Service

Existem diversas formas e um amplo leque de ferramentas para se construir uma API REST. Aqui, com a linguagem de programação Java, utilizaremos o conjunto bastante popular Spring + Hibernate e a IDE IntelliJ.

Primeiramente, convém explicar de forma sucinta do que se trata uma “API REST” e porque esse tipo de arquitetura é tão útil.

API REST com Java e Spring Boot

REST

“REST” é um acrônimo de Representational State Transfer, isto é, “Transferência Representacional de Estado”. Esses “palavrões” parecem difíceis e podem assustar. Mas a explicação é bem simples. O REST é um conjunto de princípios de arquitetura de software que facilita a transferência, entre cliente e servidor, da representação do estado atual de determinado recurso dentro de uma aplicação. Essa representação acontece por meio de diversos formatos de troca de dados entre sistemas, sendo o JSON o mais utilizado.

Com o REST, utilizam-se os mesmos conceitos do protocolo HTTP (como os verbos GET e POST), sendo assim uma comunicação de tipo stateless, isto é, sem estado. Esse tipo de comunicação estabelece pares de requisição-resposta independentes. Isso significa que o servidor não retém informações (o estado) de requisições anteriores, não trabalhando, portanto, com sessões. O REST, então, consegue nos proporcionar grande facilidade tanto na construção, quanto na execução de APIs.

Spring

Aliado ao REST, o Spring Framework também tem muito a acrescentar em termos de praticidade e agilidade na construção, execução e manutenção de aplicações.

Diferentemente do modelo um tanto mais complexo que víamos no Java EE, o Spring tornou o código muito mais simples e amigável. Esse framework é baseado em dois conceitos importantes para o mundo o desenvolvimento de software: Inversão de Controle (IoC) e Injeção de Dependência (DI).

A Inversão de Controle, de forma resumida, significa transferir a responsabilidade de um ente para outro. No nosso caso, inverte-se o controle que temos de construir objetos, isto é, o controle deixa de ser nosso e passa a ser do framework em questão. Uma das formas de se realizar a Inversão de controle é a Injeção de Dependência.

Numa aplicação, a Injeção de Dependências permite que estados sejam determinados por meio da passagem de parâmetros (por meio de construtores ou setters, por exemplo). A Injeção de Dependências, então, auxilia o processo de criar e prover instâncias que uma determinada classe precisa para ser utilizada. As dependências da classe, portanto, são providas por alguém que se encontra exterior a ela.

Isso significa que a regra de negócio escrita pelo programador não precisa lidar diretamente com todas as dependências e infraestrutura do projeto. Estas já são obtidas automaticamente. Isso torna o código mais desacoplado e, portanto, mais fácil de ser mantido.

Além disso, o Spring possui diversos módulos para diferentes tipos de aplicação e também permite a integração com ferramentas do Java EE, como JPA e Bean Validation.

Quem já desenvolveu uma API “à mão”, utilizando servlets, tendo que configurar tudo manualmente, mexer em arquivos XML etc., sabe a enorme diferença que o Spring faz na hora de desenvolver um projeto. Ele propiciou um enorme salto de produtividade e agilidade. Desse modo, fica evidente a importância desse framework no contexto atual do desenvolvimento web no mundo todo.

Mas os avanços não param aí. O projeto Spring conseguiu dar mais um passo adiante quando lançou o Spring Boot, o qual proporcionou ainda mais produtividade e agilidade para os desenvolvedores.

Spring Boot

No dia a dia de uma empresa é evidente que velocidade, agilidade e produtividade são fundamentais. E o Spring Boot foi muito oportuno ao contribuir para uma produção mais fácil e eficiente. Com ele, foi possível aproveitar melhor o tempo, inclusive na questão de manutenção dos códigos. Por ser mais simples e necessitar de menos configurações, a chance de se escrever algo errado, passível de bug, diminuiu bastante em relação ao que se via anteriormente.

Com o Spring Boot, torna-se desnecessário o uso de um container de servlets na aplicação. Desse modo, não é mais necessária a instalação de um servidor web, como o Tomcat, pois este já está embutido no framework. Isso significa também que não se faz mais necessária a criação de um arquivo WAR, pois o build da aplicação é gerado no próprio formato JAR, muito mais simples e leve. Para rodar a aplicação e subir na web, basta utilizar uma classe especial (a qual contém um método main) criada pelo próprio Spring Boot.

Novamente, a vantagem do Spring Boot em relação às tecnologias anteriores, é a maior produtividade, eficiência e agilidade, pois gasta-se muito menos tempo realizando configurações em diversas partes do projeto, dado que a estrutura do projeto a ser criado já vêm pré-configurada.

Spring Initializr

Como a economia de tempo é uma das coisas mais importantes no mundo empresarial, quanto mais automatizados os processos, melhor. É aqui que nos deparamos com o Spring Initializr, um gerador de projetos Spring Boot.

Mais uma vez, temos uma tecnologia que torna a criação de uma aplicação muito mais fácil e menos trabalhosa. Não precisamos mais criar manualmente o projeto dentro da IDE (“Create new Maven project…” ou “Create new Dynamic Web Project”) e configurar o pom.xml, o parent, as dependencies etc. Com o Spring Initializr, basta entrarmos no site, selecionarmos as preferências, darmos nome ao projeto e escolhermos as dependências. O próprio Spring Initializr já preparará um arquivo ZIP, o qual será baixado e então, após descompactado, já estará pronto para ser importado na IDE como um projeto Maven ou Gradle.

Spring Initializr

Como mostrado na imagem, em nosso projeto utilizaremos o Maven e Java 11, sendo o nome do projeto “rest” e o pacote principal “com.example.rest”.

Além disso, é possível ver que nesta API utilizaremos as dependências Spring WebSpring Data JPASpring Boot DevToolsMySQL Driver e Validation. Outras dependências comumente utilizadas em projetos deste teor, como de Security ou de Cache, não serão necessárias para os fins deste artigo.

Conforme formos montando a API, a explicação de cada uma dessas dependências será fornecida.

Spring Boot DevTools

A dependência Spring Boot DevTools, que foi adicionada na criação do projeto, serve para reiniciar a aplicação automaticamente sempre que alterarmos algo no código e salvarmos. Com isso, ganhamos eficiência, pois não precisamos parar e iniciar manualmente o servidor a cada mudança realizada.

Banco de Dados

Para o acesso a um banco de dados, utilizaremos a especificação JPA (Java Persistence API) por meio do Spring Data JPA, que adicionamos como dependência na criação do projeto. Por padrão, o Spring Boot utiliza o Hibernate como implementação da JPA, que é o ORM mais comum no mercado.

Além disso, também precisamos de uma dependência para um banco de dados. Na criação do projeto, adicionamos o MySQL Driver. É claro que para tudo funcionar corretamente, deve-se ter instalado o MySQL e ter um usuário e senha para se conectar.

A próxima etapa agora é configurar o acesso ao banco de dados. No arquivo application.properties (em src/main/resources), que já é fornecido por padrão na criação do projeto Spring Boot, devemos adicionar algumas propriedades relacionadas ao banco. Essas propriedades são padronizadas e é fácil encontrar na internet quais delas devem ser configuradas para os diferentes bancos de dados. No caso do MySQL, a configuração é esta:

Configuração properties

Dado o primeiro passo na nossa API REST, precisamos agora escrever as nossas classes, distribuí-las em camadas conforme alguma arquitetura escolhida e, por fim, criar nosso primeiro endpoint. Mas isso será feito na Parte 2.

Você pode ver o código completo no GitHub.


Está entrando no mundo da programação? Uma boa dica para iniciar seus estudos são os livros Lógica de Programação – JavaScript e HTML e Entendendo Algoritmos – guia ilustrado.

Está interessado em consumir uma API externa? Veja o artigo Consumindo API com Java, Spring Boot e Gradle.

Quer saber mais sobre APIs REST? Leia nosso artigo sobre as 9 melhores práticas!


Posts relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *