40
Globalcode – Open4education Restful APIs com Spring 3

Restful APIs com Spring 3

Embed Size (px)

DESCRIPTION

Apresentação feita no SerraStartec 2013 em Lages/SC 05/10/2013. O objetivo foi uma introdução as REST webservices utilizando o Spring.

Citation preview

Page 1: Restful APIs com Spring 3

Globalcode – Open4education

Restful APIs com Spring 3

Page 2: Restful APIs com Spring 3

Globalcode – Open4education

Restful APIs com Spring 3

Alex MirandaSoftware Engineer

Guilherme BrancoSoftware Engineer

Page 3: Restful APIs com Spring 3

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

Page 4: Restful APIs com Spring 3

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

Page 5: Restful APIs com Spring 3

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

Page 6: Restful APIs com Spring 3

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

Page 7: Restful APIs com Spring 3

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]

Page 8: Restful APIs com Spring 3

Globalcode – Open4education

GET

● Seguro● Idempotente

● Aceita headers como○ Accept○ If-None-Match

● Responde com○ 200, 304 ou 404…○ Content-Type○ Content-Length○ ETag

Page 9: Restful APIs com Spring 3

Globalcode – Open4education

GET

Page 10: Restful APIs com Spring 3

Globalcode – Open4education

GET - Exemplo

URI: /api/games/1METHOD: GetHEADERS:

Accept: application/json

Status Code: 200 OKHEADERS:

Content-Type: application/jsonContent-Length: 199 bytes

Page 11: Restful APIs com Spring 3

Globalcode – Open4education

GET - Exemplo

URI: /api/games/1METHOD: GetHEADERS:

Accept: application/json

Status Code: 404 NOT FOUND

Page 12: Restful APIs com Spring 3

Globalcode – Open4education

GET - Exemplo

URI: /api/games/1METHOD: GetHEADERS:

Accept: application/json

Status Code: 304 MovedHEADERS:

Location: /api/archivedGames/1

Page 13: Restful APIs com Spring 3

Globalcode – Open4education

PUT

● Idempotente

● Aceita headers como○ Accept○ If-Match

● Responde com○ 200, 202, 400, 404, 409, 500…○ Content-Type○ Content-Length○ ETag

Page 14: Restful APIs com Spring 3

Globalcode – Open4education

PUT

Page 15: Restful APIs com Spring 3

Globalcode – Open4education

PUT - Exemplo

URI: /api/games/1METHOD: PutHEADERS:

Accept: application/jsonContent: { status: ‘OVER’ }

Status Code: 200 OK

Page 16: Restful APIs com Spring 3

Globalcode – Open4education

PUT - Exemplo

URI: /api/games/1METHOD: PutHEADERS:

Accept: application/jsonContent: { status: ‘INVALID’ }

Status Code: 400 BAD REQUESTContent: { status: 400, reason: “invalid data” }

Page 17: Restful APIs com Spring 3

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…

Page 18: Restful APIs com Spring 3

Globalcode – Open4education

DELETE

Page 19: Restful APIs com Spring 3

Globalcode – Open4education

DELETE - Exemplo

URI: /api/games/1METHOD: Delete

Status Code: 200 OK

* Side-effect

Page 20: Restful APIs com Spring 3

Globalcode – Open4education

DELETE - Exemplo

URI: /api/games/1METHOD: Delete

Status Code: 202 ACCEPTED

Page 21: Restful APIs com Spring 3

Globalcode – Open4education

DELETE - Exemplo

URI: /api/games/1METHOD: Delete

Status Code: 301 MOVED PERMANENTLY 302 MOVED

HEADERS:Location: /api/archivedGames/1

Page 22: Restful APIs com Spring 3

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

Page 23: Restful APIs com Spring 3

Globalcode – Open4education

POST

Page 24: Restful APIs com Spring 3

Globalcode – Open4education

POST - Exemplo

URI: /api/gamesMETHOD: PostHEADERS:

Accept: application/json

Status Code: 201 CREATED

HEADERS:Location: /api/games/3 *

CR

IA U

M N

OV

O J

OG

O V

AZI

O

Page 25: Restful APIs com Spring 3

Globalcode – Open4education

POST - Exemplo

URI: /api/games/3METHOD: PostHEADERS:

Accept: application/jsonContent Type: application/json

Content: { mark: ‘X’, position: ‘TopLeftCorner’ }

Status Code: 200 CREATED * E

NV

IA J

OG

AD

A P

AR

A S

ER

VID

OR

Page 26: Restful APIs com Spring 3

Globalcode – Open4education

HIPERMEDIA

● Páginas da Web● Diversos formatos● Permite descobrir

operações disponíveis

Page 27: Restful APIs com Spring 3

Globalcode – Open4education

Modelo de Maturidade

http://martinfowler.com/articles/richardsonMaturityModel.html

Page 28: Restful APIs com Spring 3

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

Page 29: Restful APIs com Spring 3

Globalcode – Open4education

Jogo-da-velha

Page 30: Restful APIs com Spring 3

Globalcode – Open4education

Spring MVC

● Centrado em um servlet que dispacha as requisições - FrontController;

● DispatcherServlet;

● Integrado com o container IoC do Spring;

Page 31: Restful APIs com Spring 3

Globalcode – Open4education

Spring MVC

Get - api/games/1

Mapeamento no controller - api/games

Post - api/games/1

Page 32: Restful APIs com Spring 3

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

Page 33: Restful APIs com Spring 3

Globalcode – Open4education

Spring HATEOAS

● ResourceSupport, ResourceAssemblerSupport

Page 34: Restful APIs com Spring 3

Globalcode – Open4education

Spring MVC Test

● Suporte para testes de client e server-side

● Requisições utilizando o DispatcherServlet

● API fluente para os asserts

Page 35: Restful APIs com Spring 3

Globalcode – Open4education

Spring MVC Test

Page 36: Restful APIs com Spring 3

Globalcode – Open4education

Spring MVC Test

Page 37: Restful APIs com Spring 3

Globalcode – Open4education

DEMO

1. Projeto2. Rest shell3. Aplicação HTML5 + JavaScript

Page 38: Restful APIs com Spring 3

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

Page 39: Restful APIs com Spring 3

Globalcode – Open4education

Perguntas?

Page 40: Restful APIs com Spring 3

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 MirandaSoftware Engineer

Guilherme BrancoSoftware Engineer