18
{ title : HATEOAS, description : ‘Arquitetura REST 100% aderente’, author : ‘Evandro Venancio’, email: [email protected], twitter : ‘@evenancio’, version : ‘1.0.0’, date : ‘2013-12-07’ dependencies : { skills : [ ‘conhecimentos em desenvolvimento web’, ‘conhecimentos básico em REST’ } }

HATEOAS - Arquitetura REST 100% aderente

Embed Size (px)

DESCRIPTION

Apresentação de 15 minutos que demonstra que, para estar 100% compliance com a arquitetura REST, devemos utilizar hipermídias para controlar o estado.

Citation preview

Page 1: HATEOAS - Arquitetura REST 100% aderente

{

title : ‘HATEOAS’,

description : ‘Arquitetura REST 100% aderente’,

author : ‘Evandro Venancio’,email: ‘[email protected]’,twitter : ‘@evenancio’,version : ‘1.0.0’,date : ‘2013-12-07’

dependencies : {skills : [‘conhecimentos em desenvolvimento web’,‘conhecimentos básico em REST’

}

}

Page 2: HATEOAS - Arquitetura REST 100% aderente

RESTREpresentational State Transfer

(Transferência de Estado Representativo)

Page 3: HATEOAS - Arquitetura REST 100% aderente

O que é estado?> Preciso saber onde estou> Preciso saber para onde posso ir> Preciso apresentar o meu crachá para onde posso ir permitir a minha entrada> Eu não quero passar carão, por isto me dê o crachá correto e os lugares onde realmente posso ir com ele

Page 4: HATEOAS - Arquitetura REST 100% aderente

URL REWRITE

Proibida a utilização de rescrita de URL para manter o estado.Por favor, não insista.

Uso sim, e daí?

Page 5: HATEOAS - Arquitetura REST 100% aderente

Mas quem escreve serviços RESTFul de verdade???Você já leu a

tese de doutorado do

Dr. Roy Fielding?

Page 6: HATEOAS - Arquitetura REST 100% aderente

Observe:“A REST (Transferência do Estado

Representativo) é pretendida como uma imagem do design da aplicação se

comportará: uma rede de websites (um estado virtual), onde o usuário progride

com uma aplicação selecionando as ligações (transições do estado), tendo

como resultado a página seguinte (que representa o estado seguinte da

aplicação) que está sendo transferida ao usuário e apresentada para seu uso.” –

Dr. Roy Fielding, pai do REST

Page 7: HATEOAS - Arquitetura REST 100% aderente

Quatro PrincípiosProtocolo

Cliente/Servidor sem Estado

Conjunto de operações bem

definidas

Sintaxe universal para identificar os

recursos

Uso de Hipermídias

HTTP contém todas as

informações

GET, POST, DELETE, PUT

Múltiplos Endpoints

através de rotas

Proposta HATEOAS

100 % Compliance

Page 8: HATEOAS - Arquitetura REST 100% aderente

Proposta HATEOAS

2008

Leonard Richardson

The Maturity Heuristic

Page 9: HATEOAS - Arquitetura REST 100% aderente

Protocolo Cliente/Servidor

sem Estado

Conjunto de operações bem

definidas

Sintaxe universal para identificar os

recursos

Uso de Hipermídias

Richardson Maturity Model

Page 10: HATEOAS - Arquitetura REST 100% aderente

Level 0: Uma única URI e um único HTTP method

Não chamem isto de REST em respeito ao criador da arquitetura!

Protocolo Cliente/Servidor sem

Estado

Conjunto de operações bem definidas

Sintaxe universal para identificar os recursos Uso de Hipermídias

POST http://domain.me/aceitamostudoservice

{ gravarProdutoRequest : { nome : ‘titulo’,

categoria: ‘livro’ }}

POST http://domain.me/aceitamostudoservice

{ alterarClienteRequest : { id_cliente : 123,

nome: ‘Ele mesmo’,telefone: ‘11 4444-3333’

}}

HTTP/1.1 200 OK

{ id_produto: 1044, nome: ‘titulo’, categoria: ‘livro’, status : ‘INCLUIDO’}

HTTP/1.1 200 OK

{ id_cliente: 123, nome: ‘Ele mesmo’, telefone: ’11 4444-3333’, status : ‘ALTERADO’}

Page 11: HATEOAS - Arquitetura REST 100% aderente

Level 1: Diversas URI e um único HTTP method

Já está melhorando...

Protocolo Cliente/Servidor sem

Estado

Conjunto de operações bem definidas

Sintaxe universal para identificar os recursos Uso de Hipermídias

POST http://api.domain.me/produto/gravar

{ nome : ‘titulo’, categoria: ‘livro’ }

POST http://api.domain.me/cliente/123/alterar

{ nome: ‘Ele mesmo’, telefone: ‘11 4444-3333’ }

HTTP/1.1 200 OK

{ id_produto: 1044, nome: ‘titulo’, categoria: ‘livro’, status : ‘INCLUIDO’}

HTTP/1.1 200 OK

{ id_cliente: 123, nome: ‘Ele mesmo’, telefone: ’11 4444-3333’, status : ‘ALTERADO’}

Page 12: HATEOAS - Arquitetura REST 100% aderente

Level 2: Diversas URI e diversos HTTP methods

Este é o cenário mais comum. Estamos quase lá!

Protocolo Cliente/Servidor sem

Estado

Conjunto de operações bem definidas

Sintaxe universal para identificar os recursos Uso de Hipermídias

POST http://api.domain.me/produto

{ nome : ‘titulo’, categoria: ‘livro’ }

PUT http://api.domain.me/cliente/123

{ nome: ‘Ele mesmo’, telefone: ‘11 4444-3333’ }

HTTP/1.1 200 OK

{ id_produto: 1044, nome: ‘titulo’, categoria: ‘livro’, status : ‘INCLUIDO’}

HTTP/1.1 200 OK

{ id_cliente: 123, nome: ‘Ele mesmo’, telefone: ’11 4444-3333’, status : ‘ALTERADO’}

Page 13: HATEOAS - Arquitetura REST 100% aderente

Level 3: HATEOASHypermedia As The Engine Of Application State

Protocolo Cliente/Servidor sem

Estado

Conjunto de operações bem definidas

Sintaxe universal para identificar os recursos Uso de Hipermídias

> Estamos falando de onde você pode ir com o seu crachá – estado futuro da aplicação> Estamos falando de definição de fronteiras e navegação orientada> Estamos falando de fazer tudo isto utilizando Hipermídia

Page 14: HATEOAS - Arquitetura REST 100% aderente

Level 3: HATEOASNetflix = 100% REST Compliance

Protocolo Cliente/Servidor sem

Estado

Conjunto de operações bem definidas

Sintaxe universal para identificar os recursos Uso de Hipermídias

Page 15: HATEOAS - Arquitetura REST 100% aderente

Level 3: HATEOASShow!

Protocolo Cliente/Servidor sem

Estado

Conjunto de operações bem definidas

Sintaxe universal para identificar os recursos Uso de Hipermídias

> O cliente sabe para onde pode ir agora> A descoberta dos serviços disponíveis é dinâmica – logo, o Netflix pode alterar a URL de seus serviços sem se preocupar com os seus usuários> Estamos vendo o controle de estado através de hipermídias

Page 16: HATEOAS - Arquitetura REST 100% aderente

Level 3: HATEOASComo ficaria no nosso caso?

Protocolo Cliente/Servidor sem

Estado

Conjunto de operações bem definidas

Sintaxe universal para identificar os recursos Uso de Hipermídias

POST http://api.domain.me/produto

{ nome : ‘titulo’, categoria: ‘livro’ }

HTTP/1.1 200 OK

{ _links: { details: { href: ‘/produto/1044’, rel: ‘/docs/api/selfProduct’ }, update: { href: ‘/produto/1044/update’, rel: ‘/docs/api/updateproduct’ }, delete: { href: ‘/produto/1044/delete’, rel: ‘/docs/api/deleteProduct’ }, addBasket: { href: ‘/basket?productId=1044’, rel: ‘/docs/api/addInBasket’ } }, id_produto: 1044, nome: ‘titulo’, categoria: ‘livro’, status : ‘INCLUIDO’,}

Page 17: HATEOAS - Arquitetura REST 100% aderente

HATEOASFrameworks

&HAL

Page 18: HATEOAS - Arquitetura REST 100% aderente

THE ENDhttp://pt.wikipedia.org/wiki/RESThttp://martinfowler.com/articles/richardsonMaturityModel.htmlhttp://www.crummy.com/writing/speaking/2008-QCon/act3.htmlhttp://msdn.microsoft.com/en-us/magazine/jj883957.aspxhttp://www.infoq.com/news/2013/05/spring-hateoas-resthttp://stateless.co/hal_specification.html

Evandro [email protected]

@evenancio