HATEOAS - Arquitetura REST 100% aderente

Preview:

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

{

title : ‘HATEOAS’,

description : ‘Arquitetura REST 100% aderente’,

author : ‘Evandro Venancio’,email: ‘evandro.venancio@gmail.com’,twitter : ‘@evenancio’,version : ‘1.0.0’,date : ‘2013-12-07’

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

}

}

RESTREpresentational State Transfer

(Transferência de Estado Representativo)

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

URL REWRITE

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

Uso sim, e daí?

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

tese de doutorado do

Dr. Roy Fielding?

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

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

Proposta HATEOAS

2008

Leonard Richardson

The Maturity Heuristic

Protocolo Cliente/Servidor

sem Estado

Conjunto de operações bem

definidas

Sintaxe universal para identificar os

recursos

Uso de Hipermídias

Richardson Maturity Model

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’}

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’}

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’}

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

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

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

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’,}

HATEOASFrameworks

&HAL

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 Venancioevandro.venancio@gmail.com

@evenancio