Upload
evandro-venancio
View
1.647
Download
2
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
{
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’
}
}
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 [email protected]
@evenancio