SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
Globalcode – Open4education
Restful APIs com Spring 3
Globalcode – Open4education
Restful APIs com Spring 3
Alex Miranda
Software Engineer
Guilherme Branco
Software Engineer
Globalcode – Open4education
REpresentational State Transfer
● Comunicação Cliente - Servidor
● Estilo Arquitetural
● Termo cunhado por Roy Fielding em 2000
● Interface web simples que utiliza diversos formatos de
dados, sem abstrações adicionais
● Ênfase nos recursos e sem estado
Globalcode – Open4education
Porque REST?
● Simples, leve e escalável
● Orientado a recursos
● Sem estado, cada requisição contém toda informação
necessária
● Utiliza todo o poder da Web – Restful
● Fácil de começar a desenvolver uma aplicação que
conecte inúmeros clientes
● Suporta diversas plataformas, dispositivos ou tipos de
clientes
Globalcode – Open4education
Porque Spring?
● Plataforma completa para desenvolvimento de
aplicações em Java, groovy ou outras linguagens que
rodam na JVM
● Facilitou o desenvolvimento de aplicações enterprise
● Permite que o desenvolvedor foque no negócio
● Um dos frameworks mais populares e com comunidade
ativa
● Open-source
● Spring MVC Test framework
Globalcode – Open4education
Princípios do REST
● Expõe recursos logicamente organizados como uma
estrutura de um sistema de arquivos, fácil de ser
entendido
● O cliente acessa representações de um estado do
recurso
● As mensagens utilizam métodos HTTP padrões (GET,
POST, PUT e DELETE)
● O servidor é sem estado, ficando a cargo do cliente
manter estado entre requisições ao servidor
● Utiliza hipermedia tanto para representação de
estados, como para transições deste estado
Globalcode – Open4education
Conceito de Recursos
● É tudo aquilo que o seu sistema expõe
● Tudo é um recurso
○ Usuários, assinatura, autenticação, carrinho de
compra, contagem de uma produtos…
● Deve ser independente de sua representação
○ /api/users/1001.html
○ /api/users/1001.json
○ /api/users/1001 [Accept: application/xml]
Globalcode – Open4education
GET
● Seguro
● Idempotente
● Aceita headers como
○ Accept
○ If-None-Match
● Responde com
○ 200, 304 ou 404…
○ Content-Type
○ Content-Length
○ ETag
Globalcode – Open4education
GET
Globalcode – Open4education
GET - Exemplo
URI: /api/games/1
METHOD: Get
HEADERS:
Accept: application/json
Status Code: 200 OK
HEADERS:
Content-Type: application/json
Content-Length: 199 bytes
Globalcode – Open4education
GET - Exemplo
URI: /api/games/1
METHOD: Get
HEADERS:
Accept: application/json
Status Code: 404 NOT FOUND
Globalcode – Open4education
GET - Exemplo
URI: /api/games/1
METHOD: Get
HEADERS:
Accept: application/json
Status Code: 304 Moved
HEADERS:
Location: /api/archivedGames/1
Globalcode – Open4education
PUT
● Idempotente
● Aceita headers como
○ Accept
○ If-Match
● Responde com
○ 200, 202, 400, 404, 409, 500…
○ Content-Type
○ Content-Length
○ ETag
Globalcode – Open4education
PUT
Globalcode – Open4education
PUT - Exemplo
URI: /api/games/1
METHOD: Put
HEADERS:
Accept: application/json
Content: { status: ‘OVER’ }
Status Code: 200 OK
Globalcode – Open4education
PUT - Exemplo
URI: /api/games/1
METHOD: Put
HEADERS:
Accept: application/json
Content: { status: ‘INVALID’ }
Status Code: 400 BAD REQUEST
Content: { status: 400, reason: “invalid data” }
Globalcode – Open4education
DELETE
● Pode ser assíncrono
● Não aceita Message Body
● Não aceita Response Body *
● Aceita headers como
○ Accept
● Responde com
○ 200, 202, 404, 409, 500…
Globalcode – Open4education
DELETE
Globalcode – Open4education
DELETE - Exemplo
URI: /api/games/1
METHOD: Delete
Status Code: 200 OK
* Side-effect
Globalcode – Open4education
DELETE - Exemplo
URI: /api/games/1
METHOD: Delete
Status Code: 202 ACCEPTED
Globalcode – Open4education
DELETE - Exemplo
URI: /api/games/1
METHOD: Delete
Status Code: 301 MOVED PERMANENTLY
302 MOVED
HEADERS:
Location: /api/archivedGames/1
Globalcode – Open4education
POST
● Criar um recurso no servidor
● Enviar uma mensagem contendo
uma requisição para uma
operação
● Aceita headers como
○ Accept
● Responde com
○ 200, 202, 400, 500…
○ Content-Type
○ Content-Length
○ Location
○ ETag
Globalcode – Open4education
POST
Globalcode – Open4education
POST - Exemplo
URI: /api/games
METHOD: Post
HEADERS:
Accept: application/json
Status Code: 201 CREATED
HEADERS:
Location: /api/games/3
*CRIAUMNOVOJOGOVAZIO
Globalcode – Open4education
POST - Exemplo
URI: /api/games/3
METHOD: Post
HEADERS:
Accept: application/json
Content Type: application/json
Content: { mark: ‘X’, position: ‘TopLeftCorner’ }
Status Code: 200 CREATED
*ENVIAJOGADAPARASERVIDOR
Globalcode – Open4education
HIPERMEDIA
● Páginas da Web
● Diversos formatos
● Permite descobrir
operações disponíveis
Globalcode – Open4education
Modelo de Maturidade
http://martinfowler.com/articles/richardsonMaturityModel.html
Globalcode – Open4education
HATEOAS
● Hypermedia As The Engine Of Application State
● A interação do cliente com servidor se dá através
de hypermedia
● A lista de links de um recurso deve ser dinâmica e
refletir cada estado possível
● Diálogo entre cliente e servidor
● Desacopla cliente e servidor, permitindo que a API
evolua independente
Globalcode – Open4education
Jogo-da-velha
Globalcode – Open4education
Spring MVC
● Centrado em um servlet que dispacha as
requisições - FrontController;
● DispatcherServlet;
● Integrado com o container IoC do Spring;
Globalcode – Open4education
Spring MVC
Get - api/games/1
Mapeamento no controller - api/games
Post - api/games/1
Globalcode – Open4education
Spring HATEOAS
● Fornece APIs que facilitam a criação das
representações e links;
● Criação de links com base em métodos do
Controller
Globalcode – Open4education
Spring HATEOAS
● ResourceSupport, ResourceAssemblerSupport
Globalcode – Open4education
Spring MVC Test
● Suporte para testes de client e server-side
● Requisições utilizando o DispatcherServlet
● API fluente para os asserts
Globalcode – Open4education
Spring MVC Test
Globalcode – Open4education
Spring MVC Test
Globalcode – Open4education
DEMO
1. Projeto
2. Rest shell
3. Aplicação HTML5 + JavaScript
Globalcode – Open4education
Erros clássicos
● Expor estritamente todas as entidades do modelo
● Achar que todas as “ações” devem ser
implementadas para todos os recursos
● Adicionar “métodos” que não se encaixam com os
Verbos HTTP, ou métodos padrões
Globalcode – Open4education
Perguntas?
Globalcode – Open4education
Obrigado
br.linkedin.com/pub/guilherme-branco/26/775/2a4
github.com/gpbranco
twitter.com/guipbranco
br.linkedin.com/in/mmirandaalex
github.com/alexmiranda
twitter.com/mmalx
alexmiranda.net
https://github.com/alexmiranda/tic-tac-toe-restful
Alex Miranda
Software Engineer
Guilherme Branco
Software Engineer

Contenu connexe

Similaire à Restful APIs com Spring 3

Boas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIBoas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIFernando Camargo
 
Boas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIBoas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIFernando Camargo
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...BrunoSouza617
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 
TDC2018SP | Trilha Blockchain - Criando minha Primeira Blockchain Privada (DL...
TDC2018SP | Trilha Blockchain - Criando minha Primeira Blockchain Privada (DL...TDC2018SP | Trilha Blockchain - Criando minha Primeira Blockchain Privada (DL...
TDC2018SP | Trilha Blockchain - Criando minha Primeira Blockchain Privada (DL...tdc-globalcode
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteMichael Cardoso
 
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web API
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web APITrilha .NET - REST na plataforma Microsoft com ASP.NET Web API
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web APIWaldyr Felix
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com JavaJugVale
 
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1tdc-globalcode
 
Novidades do ASP.NET Core 2.1 - TDC 2018 - São Paulo
Novidades do ASP.NET Core 2.1 - TDC 2018 - São PauloNovidades do ASP.NET Core 2.1 - TDC 2018 - São Paulo
Novidades do ASP.NET Core 2.1 - TDC 2018 - São PauloRenato Groff
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaSensedia
 
Seminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaSeminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaDiego Cavalca
 
TDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDITDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDIRodrigo Cândido da Silva
 
TDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APITDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APIEdlaine Zamora
 
TDC Rec 2019 - ASP.NET Core - Requisicoes assincronas
TDC Rec 2019 - ASP.NET Core - Requisicoes assincronasTDC Rec 2019 - ASP.NET Core - Requisicoes assincronas
TDC Rec 2019 - ASP.NET Core - Requisicoes assincronasBruno Brito
 
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBArquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBMario Guedes
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com JavajesuinoPower
 
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterGerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterEdlaine Zamora
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringEder Magalhães
 

Similaire à Restful APIs com Spring 3 (20)

Boas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIBoas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful API
 
Boas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIBoas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful API
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
TDC2018SP | Trilha Blockchain - Criando minha Primeira Blockchain Privada (DL...
TDC2018SP | Trilha Blockchain - Criando minha Primeira Blockchain Privada (DL...TDC2018SP | Trilha Blockchain - Criando minha Primeira Blockchain Privada (DL...
TDC2018SP | Trilha Blockchain - Criando minha Primeira Blockchain Privada (DL...
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
 
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web API
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web APITrilha .NET - REST na plataforma Microsoft com ASP.NET Web API
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web API
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
 
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
TDC2018SP | Trilha .Net - Novidades do ASP.NET Core 2.1
 
Novidades do ASP.NET Core 2.1 - TDC 2018 - São Paulo
Novidades do ASP.NET Core 2.1 - TDC 2018 - São PauloNovidades do ASP.NET Core 2.1 - TDC 2018 - São Paulo
Novidades do ASP.NET Core 2.1 - TDC 2018 - São Paulo
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha Básica
 
Seminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaSeminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec Cafelândia
 
TDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDITDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDI
 
Metralhando sua API
Metralhando sua APIMetralhando sua API
Metralhando sua API
 
TDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APITDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua API
 
TDC Rec 2019 - ASP.NET Core - Requisicoes assincronas
TDC Rec 2019 - ASP.NET Core - Requisicoes assincronasTDC Rec 2019 - ASP.NET Core - Requisicoes assincronas
TDC Rec 2019 - ASP.NET Core - Requisicoes assincronas
 
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBArquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com Java
 
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterGerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e Spring
 

Restful APIs com Spring 3