Primeiras aulas do curso Spring Boot API REST: Construa uma API

Spring Boot API REST: Construa uma API

Introdução ao Spring Boot - Introdução

Oi, pessoal. Bem-vindos ao treinamento de API rest com Spring boot. Meu nome é Rodrigo Ferreira, sou um dos instrutores da Alura e serei o instrutor que vai acompanhar vocês neste treinamento.

Neste treinamento, vamos utilizar o Spring boot, um framework para Java bastante popular que pode ser utilizado tanto para a construção de aplicações web tradicionais, ou APIs REST, que são muito utilizadas no modelo de arquitetura de micro serviços.

É um framework bem popular, não só no Brasil, como no mundo inteiro, e vamos aprender como construir uma API REST completa. Vamos construir essa API do zero, usando o site do Spring initializr para gerar o projeto, e vamos montar nossa API, que vai ser baseada no fórum da Alura. O domínio da nossa aplicação será o fórum da Alura.

Você, como aluno, já deve conhecer. Talvez tenha postado alguma dúvida ou ajudado outro aluno. Vamos implementar essa lógica para listar os tópicos que foram cadastrados, cadastrar novos tópicos, atualizar, excluir, fazer o "CRUD", cadastro listagem atualização e exclusão, com validação, usando o bin validation. A parte de persistência vai ser feita com JPA, mas utilizando um módulo do Spring Boot, que é o Spring Boot data JPA, que deixa muito fácil e simples a camada de persistência da aplicação.

Também vamos aprender sobre boas práticas para escrever um código nesse tipo de aplicação, que segue o modelo REST. Espero vocês nessa jornada, para um primeiro vídeo, onde vamos criar nossa aplicação do zero.

Introdução ao Spring Boot - Hello World

Vamos começar então nosso treinamento de construção de APIs REST usando Spring Boot. A primeira coisa que precisamos fazer é criar nosso projeto. Tendo o Eclipse aberto, para criar o projeto (Como se trata de um projeto utilizando o Maven) poderíamos ir ao menu "File" e selecionaríamos "new", depois "Maven Project" e abriríamos uma tela branca para digitar as informações do Maven. Depois teríamos que abrir o arquivo .xml e declarar as dependências do Spring Boot. Faríamos isso tudo manualmente.

Como é um pouco chato e é sempre igual, o próprio pessoal do Spring criou um site que é um gerador de projetos com Spring Boot, chamado Spring initializr. No caso, vamos utilizar esse site, porque é muito mais simples, rápido e prático.

Acessaremos o site pela URL https://start.spring.io/. Na tela inicial do Spring Initializr, você vai precisar passar algumas informações sobre o seu projeto. Por exemplo, ele te pergunta, no campo "Project", se você quer criar um projeto usando Maven ou Gradle. Algumas pessoas preferem o Gradle. No campo "Language", pergunta qual a linguagem de programação. O Spring Boot suporta as linguagens Java, Katlin ou Groovy.No campo "Spring Boot", pergunta a versão do Spring Boot e outras informações do projeto.

Na data de criação do treinamento, a versão estável é a 2.1.4. No curso, é essa que vamos utilizar. O recomendado é que vocês utilizem o download do projeto que vamos disponibilizar e que já vem com essa versão, para garantir que não haverá nenhum problema.

Ainda na página do Spring Initializr, mais abaixo, temos que preencher o campo "Project Metadata" com as informações a respeito do projeto que o Maven precisa: primeiro, quem é o group id; segundo, o artifact id. No nosso caso, o primeiro vai ser "br.com.alura" e o segundo será "forum". Descendo um pouco mais, encontraremos o botão "More Options", "Opções a mais", para descrição e pacote, mas, a princípio, vamos deixar as opções padrão. Por fim, temos o campo "Dependencies" para adicionar as dependências do Spring Boot que você quer utilizar no seu projeto. Para fins didáticos, vamos deixar, por enquanto, só o módulo web. Mas, no mundo real, você vai usar o módulo de segurança (o da JPA, por exemplo) e já vai adicionando ele na hora de gerar seu projeto. Aqui no exemplo, vamos usar apenas o módulo Web.

No fim da página, temos o botão verde "Generate Project" ou "Gerar o projeto". Quando você pressionar esse botão, ele vai fazer o download de um arquivo zip (no nosso exemplo, ele se chama "forum" que é o nome do projeto. Tudo fica: forum.zip). Abrindo esse arquivo (e, dentro dele, a pasta "forum"), perceberemos que esse zip nada mais é do que um projeto com a estrutura do Maven. A ideia é descompactar ele em algum diretório. Para isso, selecionaremos a pasta "forum". Em seguida, na parte de cima da página, canto esquerdo, pressionaremos "Extract To" e ele mostrará a tela "Extraction path and options", onde escolheremos um diretório do computador. Tendo terminado, voltaremos ao Eclipse (nossa IDE) e pressionaremos "File > Import". Na tela do Import, selecionaremos a subopção “existing maven projects” e apertaremos "Next". Na próxima tela, no campo browser, escolheremos a pasta onde foi feita o download, selecionando "Downloads > forum". Em seguida, pressionaremos "Selecionar pasta", depois, "finish", e ele vai importar o projeto no Eclipse.

Na primeira vez que você fizer isso, ele vai baixar as dependências do projeto do Spring Boot a partir da internet. Dependendo da sua conexão pode demorar. Assim que ele importou, você vai observar que nada mais é do que um projeto na estrutura do Maven. Tem os diretórios "src/main/java", "src/main/resources" e "src/test/java", tudo certo.

Vamos abrir o pom.xml (que corresponde ao forum/pom.xml) um arquivo importante do nosso projeto. Ele tem as informações que digitamos no site.

<groupId>br.com.alura</groupId>
    <artifactId>forum</artifactId>
    <version>0.0.1-SNAPSHOT</version>

Repare que temos também uma tag (que é a primeira tag que ele coloca), a tag <parent>.

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

ELe usa essa tag para "herdar" do pom.xml do Spring Boot. Ou seja, esse é um jeito de dizer que você quer usar o Spring Boot no projeto. Você "herda", ou, declara na tag <parent> o pom.xml do Spring Boot. Se não estivéssemos usando o Srpring Initializr, teríamos que digitar manualmente.

Depois tem a versão do Java, que por padrão é o 1.8.

    <properties>
        <java.version>1.8</java.version>
    </properties>

E depois as dependências que adicionamos no último campo.

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

No caso, eu só escolhi a dependência web e veio uma de testes automatizados por padrão. Isso acontece porque o Spring considera que você vai fazer testes automatizados no seu projeto.

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

Por último, o plugin para fazer o build do projeto.

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

O pom.xmlé basicamente isso. O que vamos mexer no arquivo futuramente é: ir à tag <dependency> e adicionar as outras dependências que utilizaremos posteriormente.

Além disso, se pressionarmos o "src/main/Java", perceberemos que ele criou um pacote "br.com.alura.forum", de acordo com a estrutura que nós definimos, e a classe chamada fórumApplication.java, que é o nome do projeto.

package br.com.alura.forum;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ForumApplicationTests {

    @Test
    public void contextLoads() {
    }

}



Se trata de uma classe que tem um método main() e chama o método run() estático da classe SpringApplication. Essa classe tem a notação @springbootapplication. Essa é a classe que vamos utilizar para rodar nosso projeto. Nele, nós não adicionamos o servidor separado (Tomcat) e incluímos o projeto nele. Para rodar o projeto, rodamos a classe main e ele tem um Tomcat embutido que roda para subir nossa aplicação.

Vou rodar para fazer uma demonstração. Você vê que ele vai imprimir algumas coisas e gerar o log:

Tomcat initialized with port(s): 8080(http)

Então, ele tem um Tomcat embutido e, por padrão, roda na porta 8080. Isso é configurável também.

Vamos fazer o teste para ver se está funcionando. Vou acessar a URL http://localhost:8080/. Deu uma tela de erro, que é a tela de erro do Spring Boot. Deu erro justamente porque o endereço não está mapeado. Mas se apareceu essa tela, significa que o Spring Boot está funcionando.

Só para garantir que está tudo ok, vamos fazer nosso famoso Hello World. Vou criar um controller, mapear para o endereço barra, e ver se o Spring vai chamar o endereço.

Para criar um controller, vou criar uma nova classe pressionando "br.com.alura.forum" e selecionando o comando "Ctrl + N". Na próxima tela, vou selecionar "Class". Depois, vou trocar o "Package", "pacote", para "controller" (Package: br.com.alura.forum.controller). O nome da classe vai ser “HelloController”. Em seguida, apertamos "Finish". No Spring MVC, você anota a classe com a @controller, para o Spring conseguir encontrar a classe, e ele que vai fazer o gerenciamento da classe. Depois, nós só temos que fazer o import da classe (da notação que vem do pacote do Spring). E vou criar um método public, que devolve uma string e que vou chamar o método de hello(). Tudo fica: public string hello() {. Agora, vou apenas devolver uma string para ver se vai funcionar e inserir "Hello World!";.

package br.com.alura.forum.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @RequestMapping("/")
    @ResponseBody
    public String hello() {
        return "Hello World!";
    }

}


Tenho que colocar, em cima do método public string hello() {, o @RequestMapping("/") só para dizer qual é a URL quando o Spring chamar esse método. Note que, no exemplo, eu coloquei uma barra, "/". Se eu chamar a URL http://localhost:8080/users, ele tem que cair nesse método e devolver essa string:

"Hello World!"

Como eu não quero navegar para uma página ("JSP", Java Server Pages, ou Thymeleaf) tenho que colocar mais uma notação, que é o @ResponseBody. Senão, o Spring vai considerar que o retorno (a string "Hello World") é uma página e ele vai procurar essa página no nosso projeto. Colocando o @ResponseBody, ele devolve a string direto para o navegador.

Vou salvar. Tenho que parar o projeto, abrir a classe main e rodar de novo. Acessando a URL http://localhost:8080/ Vou dar um refresh na página. Perceba que apareceu o "Hello World!", então funcionou. Assim, temos nosso projeto criado, nosso "Hello World", tudo funcionando. Podemos começar a desenvolver nossa API de fato.

Introdução ao Spring Boot - Sobre Spring e Spring Boot

Neste vídeo, vou falar um pouco sobre a história do Spring e do Spring Boot. Por isso, é um vídeo opcional. Nele, não vamos implementar nada na nossa API, e, caso você já conheça um pouco a história do Spring e do Spring Boot, ou não tenha interesse, você pode pular esse vídeo normalmente e assistir o próximo.

O Spring é um dos frameworks mais antigos do Java. Foi criado em 2002, 2003, e, até hoje, está firme e forte no mercado, cada vez mais popular e sendo utilizado por desenvolvedores Java não só no Brasil, mas no mundo inteiro.

O Spring foi desenvolvido por um desenvolvedor chamado Rod Johnson. Naquela época (2000/2002), o pessoal utilizava muito o Java EE para desenvolver aplicações corporativas com Java, ele era até chamado de J2EE. Dentro do J2EE você tinha algumas tecnologias, como RMI, JB, dentre outras, que eram um pouco complexas, e muitos desenvolvedores acabavam sofrendo quando iam desenvolver aplicações grandes, que precisavam ter uma boa performance e boa escalabilidade. Não por culpa do J2EE em si, mas por mal uso, por não conhecer boas práticas.

O Rod era um especialista em J2EE. Ele sabia muito bem das armadilhas e como montar uma boa arquitetura: robusta, escalável e de fácil manutenção. Ele teve essa visão, viu essa dificuldade (se baseando nas consultorias que prestava) e teve a ideia de escrever um livro. Então, neste livro, ele escreveu dicas de como montar uma arquitetura escalável, robusta, performática, usando o J2EE e sem cair nas armadilhas do mercado.

O livro que ele escreveu se chama "Expert One-on-One: J2EE Design and Development". É um livro que ficou bem famoso. Além de mostrar esses problemas do J2EE e como você poderia montar uma boa arquitetura, ele também mostrava algumas das dificuldades e coisas ruins do J2EE em si. Ele apresentou no livro dele um código, como se fosse uma biblioteca alternativa. Nesse livro, ele escreveu mais de trinta mil linhas de código.

Posteriormente, junto com o livro, foi publicado um fórum onde as pessoas podiam discutir e fazer o download da biblioteca. Várias pessoas começaram a baixar e utilizar nos projetos. Alguns desenvolvedores deram uma ideia para o Rod: por que não pegamos esse código, transformamos em uma biblioteca e lançamos no mercado gratuitamente, para ser uma alternativa ao J2EE?

Depois, alguns desenvolvedores se reuniram com ele e eles foram criando essa biblioteca, que foi publicada em 2003, sendo que a versão 1.0 saiu em 2004. Assim nasce o Spring framework.

A ideia do Spring era ser uma alternativa a esse modelo complexo do J2EE. O grande foco dele era em simplicidade de código. O coração do Spring foi todo baseado nos padrões de inversão de controle e injeção de dependências. Com isso, o seu código (a sua lógica de negócio, sua regra) não precisava correr atrás das dependências da infraestrutura. Nós invertíamos o controle e a infraestrutura chegava pronta para o seu código, para que ele fosse fácil de manter, desacoplado.

Esse foi o coração do Spring. E isso agradou muito os desenvolvedores, que conseguiam implementar seu sistema com classes Java seguindo o padrão POJO, classe simples, sem ter muita dependência de infraestrutura, nem nada muito complexo.

Com isso, o Spring acabou se tornando popular, foi evoluindo e sendo desenvolvido também em módulos. Você tinha o módulo central de "IOC", inversão de controles, e, em volta dele, você tinha alguns módulos, como MVC, módulo de segurança, de transação. Inclusive, ele até suportava o JavaEE, porque se integra com tecnologias como JPA e como o bean validation, que veremos no curso. Então, era uma alternativa, mas nunca foi um concorrente, nunca quis substituir o J2EE. Sempre quis ser um complemento. Inclusive, ele utiliza muitas das tecnologias do JavaEE.

Ele foi evoluindo, foram surgindo novos módulos. Enquanto isso, o JavaEE também foi evoluindo. Foram surgindo outras tecnologias, o EJB, que era o grande coração do J2EE, que dava muito problema, muita dor de cabeça. Foram surgindo outras tecnologias e frameworks no mercado, como JSF, Wicket, Vaadin, depois o CDI, dentre outras coisas. Mas aí, o JavaEE acabou dando uma esfriada, tendo alguns problemas com a comunidade e ficando para trás. Em 2013, 2014, o pessoal do Spring criou o Spring Boot, que foi um projeto que revolucionou o desenvolvimento para Java e que fez o Spring alavancar de novo no mercado.

A ideia do Spring Boot é que você consiga desenvolver uma aplicação sem o uso de um container, sem ser o desenvolvimento tradicional, em que você precisa ter sua aplicação e roda ela dentro de um servidor. Quando você termina de desenvolver, você gera um WAR e joga ele dentro de um servidor. A ideia do Spring Boot é inverter esse processo. Temos um servidor embutido e rodamos a aplicação em um main. Conforme vamos ver no curso, o nosso projeto vai ser inicializado por uma classe main.

Com isso, não preciso mais gerar um WAR. Posso gerar o build da minha aplicação como sendo um JAR, que é muito mais leve e mais simples de ser executado. Isso acabou indo de encontro com ideias fortes no mercado, como a de desenvolvimento de micro serviços. O pessoal utiliza muito o Spring Boot para montar micro serviços, como o API REST. Se você tem uma API REST, para desenvolver com o Spring Boot é muito simples, porque, além do contêiner ser embutido, o Spring Boot também simplificou uma coisa que era muito chata no Spring, que é a parte de configuração.

Quando o Spring começou, toda a parte de configuração era feita via .xml. você tinha um .xml gigantesco configurando zilhões de coisas. Depois eles evoluíram e trouxeram o suporte para anotações, mas, mesmo assim, você tinha que criar várias classes com vários beans configurados com anotações. Ficava algo muito complexo. Para você criar um projeto do zero, você gastava um tempão só para fazer a parte de configuração.

A ideia do Spring Boot é que muitas coisas já vêm configuradas por padrão para você. Você consegue criar um projeto e inicializá-lo de uma maneira muito rápida, muito produtiva, o que atraiu as empresas a utilizarem o Java.

O Spring Boot foi evoluindo, e hoje está firme e forte no mercado como principal framework utilizado por desenvolvedores Java para construir aplicações REST, em micro serviços e em containers. Esses usos vão ao encontro da ideia de usar o Spring Boot (uma aplicação Java leve, simples) rodando dentro de um container, usando o Docker, por exemplo. Essa evolução acabou condizendo com as tendências de mercado. Graças a isso, o Spring disparou. O Boot foi o que fez o Spring disparar no mercado.

O Java EE acabou decaindo. Não morreu, mas caiu em desuso. Hoje, é bem difícil ver um projeto sendo desenvolvido com Java EE. O pessoal prefere utilizar o Spring, Spring Boot e Spring Cloud, que é um conjunto de bibliotecas que foram utilizadas para montar micro serviços e ter toda a infraestrutura de micro serviços.

Um grande "case" é o da Netflix, que tem vários projetos que o Spring Boot simplificou muito. Essa é a história do Spring e do Spring Boot. Por isso, recomendamos fortemente para você que é um desenvolvedor Java e que, necessariamente, vai trabalhar com desenvolvimento de aplicações Java, vai montar uma API REST e trabalhar com micro serviços: o Spring Boot e o Spring Cloud são ferramentas indispensáveis. É o que está sendo utilizado no mercado, tanto no Brasil quanto no exterior.

Neste treinamento, vamos aprender um pouco sobre o Spring Boot, vamos desenvolver nossa API REST e você vai se inteirar em como ele é utilizado para esse objetivo. Valeu por assistir esse vídeo. No próximo a gente continua a trabalhar na nossa aplicação.

Sobre o curso Spring Boot API REST: Construa uma API

O curso Spring Boot API REST: Construa uma API possui 186 minutos de vídeos, em um total de 56 atividades. Gostou? Conheça nossos outros cursos de Java em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Java acessando integralmente esse e outros cursos, comece hoje!

  • 1269 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1269 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1269 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1269 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas