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 - 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 - 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 - 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
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
Spring MVC
● Centrado em um servlet que dispacha as
requisições - FrontController;
● DispatcherServlet;
● Integrado com o container IoC do Spring;
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 MVC Test
● Suporte para testes de client e server-side
● Requisições utilizando o DispatcherServlet
● API fluente para os asserts
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