Criando uma API com Groovy e Spring Boot

Eduardo Pitz
6 min readDec 8, 2020

--

Algumas tecnologias facilitam um bocado a vida do codificador: você deve investir o tempo resolvendo problemas complexos com um código extremamente simples. O Groovy e o Spring Boot fazem parte deste seleto time.

Photo by Karl Fredrickson on Unsplash

Groovy, por que Groovy?

O Groovy é uma linguagem elegante e que tem como principal objetivo te trazer produtividade, sua sintaxe é muito similar ao Java — eu diria que é um Java açucarado.

Você pode codar de forma tipada ou não, e sua compilação pode ser dinâmica ou estática e utiliza a JVM. O Groovy se integra perfeitamente a qualquer código Java e entrega imediatamente ao seu aplicativo recursos poderosos, incluindo recursos de script, criação de linguagem específica de domínio, tempo de execução e metaprogramação em tempo de compilação e programação funcional.

O Groovy se torna uma boa opção para times que já utilizam o Java e buscam por uma linguagem sem todos as chatices que encontramos no Java puro.

As maravilhas do Spring Boot

Criar um projeto novo tende a ser um pouco chato e cansativo: você sempre esquecerá algo bobo e passará minutos quebrando a cabeça. O Spring Boot veio para resolver este tipo de problema, ele facilita a criação de seus projetos. Como o próprio site diz, o objetivo é permite que você crie um projeto pronto para produção para “simplesmente executar”.

Com um esforço ridículo, você define quais módulos são necessários ao criar o seu projeto e deixa todo o trabalho pesado para o Spring Boot.

Basta que você diga pra ele quais módulos deseja utilizar (WEB, Template, Persistência, Segurança, etc.) que ele vai reconhecer e configurar. A necessidade de novos módulos vão surgindo com o tempo e com o uso do Maven ou Gradle a adição é extremamente simples.

Ok, chega de papo e vamos ao código.

Criando o seu projeto com o Sring Initializr

Vamos criar o nosso esqueleto! Usando o Spring Initializr, crie o projeto com os seguintes parâmetros:

  • Defina a linguagem para Groovy.
  • Escolha a opção Gradle Project.
  • Escolha a versão 2.4.0 do Spring Boot.
  • Defina o Group e o Artifact como achar melhor. Eu sugiro você investir alguns minutos pesquisando sobre qual a melhor maneira para definir um pacote em Java.
  • Adicione as dependências: Spring Web, Spring Data JPA e MySQL Driver.

Pronto, basta confirmar e baixar o .zip do projeto criado e já conseguimos a nossa primeira versão compilável.

Caso você queira, acesse o repositório do código deste texto.

Configurando o nosso banco de dados MySQL

Conforme você já deve ter notado no passo anterior, para este exemplo iremos utilizar o MySQL. A configuração de seu banco de dados no Spring Boot é algo extremamente simples.

Vamos configurar o application.properties para permitir que você crie suas tabelas automaticamente, utilizando a abordagem code first. Para isso, você pode seguir o seguinte passo-a-passo:

  1. Primeiro crie seu schema no MySql.

2. Agora, configure o application.properties da seguinte maneira:

3. Para definirmos que o hibernate deve efetuar as atualizações sempre que alguma modificação ocorrer em nossas domains do projeto, utilizaremos a propriedade spring.jpa.hibernate.ddl-auto.

Basicamente é isso, por padrão o Spring irá definir a maioria das configurações e isso é o suficiente para este projeto.

Criando nossas classes de domínio

Para a criação de nossas classes de domínio iremos precisar de uma BaseEntity. A BaseEntity irá conter algumas definições padrões de nossas classes.

Com isso, crie o seguinte package: com.pitzdev.groovyboot.domain.base.

Um ponto importante aqui, o Spring Boot nos permite duas formas de definir se uma coluna pode ser nula ou não: Com @NotNull ou com @Column(nullable = false). Você pode ler e entender o que te atende melhor aqui.

Com o nosso BaseEntity criado, podemos dar vida ao restante dos domínios deste projeto: Holder e Card.

A classe não fica mais clara quando não existem vários getter e setters?

Criando um Repository

Com os nossos domínios criados, iremos precisar de nossos Repositories. O repository será responsável por acessar e salvar os dados em nosso banco de dados. Com o uso do JPA, a criação de um repository — por hora — é bem simples:

Costruíndo a nossa camada de negócio

Agora vamos criar um package para armazenar toda a nossa camada de negócio. Crie o seguinte package: com.pitzdev.groovyboot.domain.service

Por enquanto apenas vamos criar o Service para a entidade Holder. Crie um package holder e dentro dele vamos adicionar a nossa interface e o nosso service.

Se desejarmos tornar o nosso service transacional, podemos adicionar a annotation @javax.transaction.Transactional em noso service. Caso você goste de ler um pouco mais sobre essa annotation, eu recomendo este texto.

Por fim, o nosso Controller

Assim como os demais, crie um package para os seus controllers e dentro dele uma pasta específica para controllers relacionados ao Holder. Com isso, teremos: com.pitzdev.groovyboot.controller.holder

É extremamente simples definir os end-points de nossa aplicação, com a annotation @RequestMapping deixamos explícito os end-points e métodos a serem acessados.

Outro ponto interessante é a criação de um método para conter exceptions. O método onIllegalArgumentException() será executado sempre que uma IllegalArgumentException ocorrer, isso nos permite tratar o retorno apresentado ao usuário e logar problemas encontrados.

Outro ponto interessante do Groovy é permitir que através de um Map, todos os parâmetros do corpo requisição sejam enviados para sua camada de negócio. Isso pode ser estranho para produtos complexos, mas te possibilita uma maior produtividade no início de seu projeto.

Minhas considerações

O Groovy atualmente é uma das minhas linguagens preferidas: você tem um Java facilitado com todos os benefícios que o Java e seu ambiente poderiam te trazer — os mais puristas provavelmente odeiam Groovy.

Querendo ou não, o Groovy surfou na onda do Ruby a fim de trazer uma linguagem simples e com uma curva de aprendizado pequena. Com isso, a parceria entre Groovy e Spring Boot se torna viável e uma boa opção para tirar o seu projeto do papel ou criar micro-serviços em sua empresa.

Um ponto que pretendo avaliar no futuro é: Groovy com Spring Boot ou Grails? Qual te traz mais benefícios? Futuramente devo melhorar o projeto presente neste texto e talvez, continuar a escrever por aqui.

--

--

Eduardo Pitz
Eduardo Pitz

Written by Eduardo Pitz

Java, Groovy, Clojure and some coffee :)

No responses yet