Criando uma API com Spring Boot e Kotlin — parte 1
Tags: kotlin, api, spring
Published: 2022-10-29 02:20:37

Existem diversas formas e ferramentas para se construir APIs, hoje inicio uma série de posts em que construo uma API simples usando Spring Boot e Kotlin para um app que eu e meus amigos criamos há um tempo.

O app Android que criamos servia para ajudar consumidores a montar PCs por meio da escolha das suas peças, como placa-mãe, processador, memória ram, etc. Como nosso app não tem um back-end próprio, o back-end é basicamente feito por meio do Firebase, então resolvi construir um back-end para ele.

A API vai ser basicamente um CRUD de um Setup, uma entidade composta por um nome e suas peças, as peças do Setup. Fazer um CRUD significa criar (Create), ler (Read), atualizar (Update) e deletar (Delete).

Nesse primeiro post nós vamos configurar e criar nosso projeto usando a ferramenta Spring Initializr do site do Spring Boot.

## O que é Spring Boot?

Spring Boot é um framework Java/Kotlin que facilita a criação de aplicações Web como APIs e webservices. Ele provê de forma default servidores como o Tomcat e dependências que simplificam a configuração do build.

Nessa série de posts nós vamos usar o Spring Boot para criar uma API RESTful para um CRUD básica usufruindo de algumas dependências do Spring como a Spring Web e a Spring Data JPA.

## Configurando o projeto

Para configurar o projeto, usaremos a ferramenta Spring Initializr que permite em poucos passos gerar um projeto Spring.

Ao acessarmos o site, nós deparamos que a tela de configuração completa, onde escolheremos a build tool do projeto, a linguagem, a versão do Spring Boot, os metadados do projeto, o tipo de empacotamento, a versão do Java e as dependências.

![Tela de configuração do Spring Initializr](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5mb6gu9l3z4tgxggw2h2.png)

Como pode ver nosso projeto vai usar o build tool Gradle, a linguagem Kotlin, a versão 2.7.5 do Spring Boot, os metadados como `Group`, que representa a organização que desenvolverá o projeto e o `Artifact`, que se refere ao nome do projeto, é `pchunter`, Jar como empacotamento e versão 11 do Java.

Agora quanto as dependências do nosso projeto, vamos usar as seguinte:
1. Spring Web: possibilita a utilização do Spring MVC e do Apache Tomcat como container default,
2.     Spring Data JPA: permite o armazenamento e a persistência de dados em SQL com a Java Persistence API usando o Spring Data e o Hibernate,
3.     HyperSQL Database: um motor leve para um banco de dados que permite o armazenamento e a persistência de dados tanto em memória quanto em arquivo, ou seja, poderemos usar um banco de dados sem a necessidade de instalar um software para isso, como o MySQL, Oracle e Postgres e
4.     DevTools: essa dependência é do próprio Spring Boot, ela serve para facilitar o processo de deploy do nosso servidor durante o desenvolvimento.

![Adicionando as dependências necessárias ao projeto](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2haqumeliot81r9857kh.png)

Pronto, basta clicar em `GENERATE` e nosso projeto será baixado como `.zip`!

## Rodando nosso projeto

Após extrair o projeto, basta abrirmos o projeto em alguma IDE que suporte desenvolvimento Web com Java/Kotlin. Eu optei pelo IntelliJ da Jetbrains porque ele dá suporte a Kotlin e Gradle de forma nativa.

![Estrutura do nosso projeto no IntelliJ](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m45sh2fd0b90ii1k7149.png)

Ao abrirmos o projeto, podemos ver a estrutura criada pelo Initializr como o pacote do projeto com o nosso Group como `br.com.pchunter`, entre outros com os arquivos do gradle e do build.

Agora, vamos analizar o arquivo `.kt` gerado automaticamente pelo Initializr, o `PchunterApplication`. Esse arquivo é a classe padrão com o intuito de rodar o Spring Boot para nós.

{% embed https://gist.github.com/ronaldocoding/20d712d9ede2178aa055915427f4e4e3 %}

Note que essa classe tem a annotation `@SpringBootApplication`, ela serve para indicar a classe de configuração do Spring, ou seja, podemos realizar as configurações do nosso projeto a partir dessa classe.

Pronto, já podemos executar nosso projeto rodando a classe `PchunterApplication`:

![Projeto sendo executado](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vcd7xw6jtip3r34b8xzu.png)

Note que nosso servidor já está operando na porta 8080, ou seja, nossa aplicação já está funcionando!


![Servidor Tomcat rodando na porte 8080](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t6wio1d4mx9nqumosew0.png)

Ao acessarmos `localhost:8080` podemos ver que o Spring Boot respondeu a requisição com um 404 porque ainda não configuramos nenhuma classe `Controller` para receber a requisição e responder de alguma forma.

![Projeto rodando no localhost:8080](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2unjtw9pkmj5n2w14vqk.png)

Nosso trabalho acaba por aqui 🤓

Segue repo do github:

{% embed https://github.com/ronaldocoding/pchunter-api %}

Próximo post:

{% embed https://dev.to/ronaldocoding/criando-uma-api-com-spring-boot-e-kotlin-parte-2-jf1 %}

No próximo post vamos criar as classes referentes ao Setup e as funções de GET e POST para a nossa aplicação. Obrigado pela atenção e até a próxima!