Arquitetura de Dispositivos Móveis
Workshop:
Construindo uma API RESTFul com Spring Boot
@lucasscarduelliFORTI - IFSC Lages
Quem sou eu?
Lucas Boeing Scarduelli
Arquiteto de Software, empreendedor e professor
Bacharel em Sistemas de Informação
Pós Graduação em Gerenciamento de Projetos
+13 anos de experiência em dev
+10 anos de experiência em dev web
@lucasscarduelli
Quem sou eu?
Lucas Boeing Scarduelli
Arquiteto de Software, empreendedor e professor
Bacharel em Sistemas de Informação
Pós Graduação em Gerenciamento de Projetos
+13 anos de experiência em dev
+10 anos de experiência em dev web
@lucasscarduelli
Quem sou eu?
@lucasscarduelli
O que é uma API?
@lucasscarduelli
O que é uma API?
@lucasscarduelli
@lucasscarduelli
O que é uma REST API?
@lucasscarduelli
O que é uma API?
REST Principles
@lucasscarduelli
Client-Server
Uniform Contracts
Stateless
Cacheable
Layered System
Code-on-Demand
Qual a diferença?
@lucasscarduelli
RESTFul Principles
@lucasscarduelli
REST
Resources
Stateless
Uniforme
Discoverable
Os níveis de maturidade REST
@lucasscarduelli
Level 0: The Swamp of POX
@lucasscarduelli
Level 1: Resources
@lucasscarduelli
Level 1: Resources
@lucasscarduelli
Level 1: Resources
@lucasscarduelli
URI
Level 2: HTTP Verbs & Codes
@lucasscarduelli
Level 2: HTTP Verbs & Codes
@lucasscarduelli
VERBS
Level 2: HTTP Verbs & Codes
@lucasscarduelli
CODES
https://httpstatuses.com/
https://http.cat/
https://httpstatusdogs.com/
Level 3: Hypermedia Controls
@lucasscarduelli
Level 3: Hypermedia Controls
@lucasscarduelli
Level 3: Hypermedia Controls
@lucasscarduelli
Spring
@lucasscarduelli
O Spring é um framework open source Java criado com o objetivo de facilitar o
desenvolvimento de aplicações, explorando, para isso, os conceitos de
Inversão de Controle e Injeção de Dependências.
Spring
@lucasscarduelli
Spring
@lucasscarduelli
Spring
@lucasscarduelli
Não precisa de um servidor de aplicação para funcionar
Utilizar apenas o que é necessário para o projeto
Baseado na inversão de controle e injeção de dependência
Inversão de Controle
@lucasscarduelli
Permite delegar a outro elemento o controle sobre como e quando um objeto
deve ser criado e quando um método deve ser executado.
Injeção de Dependência
@lucasscarduelli
É uma das maneiras de implementar a IoC, a classe deixa de se preocupar em
como resolver as suas dependências.
Ela passa a manter o foco apenas no uso dos recursos das dependências para
realizar as tarefas que precisa.
Spring Boot
@lucasscarduelli
É um micro framework, que veio para facilitar o processo de configuração e
publicação de nossas aplicações. A intenção é ter o seu projeto rodando o
mais rápido possível e sem complicação.
O conceito de convenção sobre configuração é o grande motor por trás do
ganho de produtividade do Spring Boot
Spring Boot
@lucasscarduelli
Spring Boot
@lucasscarduelli
1. Construa qualquer coisa: API RESTFul, WebSocket, Web, Streaming,
JOBS, etc...
2. Simplificação de segurança
3. Servidores de aplicação embutidos: Tomcat, Jetty e Undertow
4. Ferramentas de produtividade para dev, como: LiveReload e AutoRestart
5. Dependências que “apenas funcionam”
6. Rastreabilidade, métricas e status da aplicação prontos para produção
7. Funciona na sua IDE favorita: Spring Tool Suite (eclipse), IntellijIDEA e
NetBeans
Spring Boot
@lucasscarduelli
E por último….
Spring Boot
@lucasscarduelli
Tenha sua aplicação rodando em poucos minutos com
Spring Initializr
https://start.spring.io/
@lucasscarduelliHANDS-ON #1
HANDS-ON #1
API REST Hello World em 15 min
https://start.spring.io/
@lucasscarduelliHANDS-ON #1
@lucasscarduelliHANDS-ON #1: POSTMAN
@lucasscarduelliHANDS-ON #2
HANDS-ON #2
API RESTFul de maturidade level 3
@lucasscarduelliHANDS-ON #2: Criando a aplicação
@lucasscarduelliHANDS-ON #2: Criando a aplicação
@lucasscarduelliHANDS-ON #2: Entendendo o arquivo gradle
@lucasscarduelliHANDS-ON #2: Entendendo a estrutura do projeto
@lucasscarduelliHANDS-ON #2: A classe main
@lucasscarduelliHANDS-ON #2: Liquibase
@lucasscarduelliHANDS-ON #2: Liquibase
@lucasscarduelliHANDS-ON #2: Liquibase
@lucasscarduelliHANDS-ON #2: Configurando processador Lombok
@lucasscarduelliHANDS-ON #2: Configurando application.yml
@lucasscarduelliHANDS-ON #2: Console H2
@lucasscarduelliHANDS-ON #2: Enums
@lucasscarduelliHANDS-ON #2: Entity
@lucasscarduelliHANDS-ON #2: Controller - Versão 1
@lucasscarduelliHANDS-ON #2: Controller - Versão 1
@lucasscarduelliHANDS-ON #2: Controller - Versão 1
@lucasscarduelliHANDS-ON #2: Controller - Versão 1
@lucasscarduelliHANDS-ON #2: Repository
@lucasscarduelliHANDS-ON #2: Service
@lucasscarduelliHANDS-ON #2: Service
@lucasscarduelliHANDS-ON #2: Service
@lucasscarduelliHANDS-ON #2: Service
@lucasscarduelliHANDS-ON #2: Controller - Versão 2
@lucasscarduelliHANDS-ON #2: Controller - Versão 2
@lucasscarduelli
CHEGAMOS A
MATURIDADE LEVEL 2
@lucasscarduelli
REFATORANDO PARA
MATURIDADE LEVEL 3
@lucasscarduelliHANDS-ON #2: Swagger
@lucasscarduelliHANDS-ON #2: Swagger
@lucasscarduelliHANDS-ON #2: Swagger
@lucasscarduelliHANDS-ON #2: HATEOAS
@lucasscarduelliHANDS-ON #2: HATEOAS
@lucasscarduelliHANDS-ON #2: HATEOAS
@lucasscarduelliHANDS-ON #2: HATEOAS
@lucasscarduelliHANDS-ON #2: Código-fonte
Código-fonte do projeto:
https://github.com/lucasscarduelli/ifsc-lages-fortei-workshop-springboot.git
@lucasscarduelliHANDS-ON #2: Publicar no Heroku
@lucasscarduelliHANDS-ON #2: Publicar no Heroku
@lucasscarduelliHANDS-ON #2: Publicar no Heroku

Workshop: Construindo uma API RESTFul com Spring Boot