HATEOAS - Arquitetura REST 100% aderente
-
Upload
evandro-venancio -
Category
Technology
-
view
1.646 -
download
2
description
Transcript of HATEOAS - Arquitetura REST 100% aderente
![Page 1: HATEOAS - Arquitetura REST 100% aderente](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/1.jpg)
{
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/2.jpg)
RESTREpresentational State Transfer
(Transferência de Estado Representativo)
![Page 3: HATEOAS - Arquitetura REST 100% aderente](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/3.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/4.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/5.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/6.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/7.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/8.jpg)
Proposta HATEOAS
2008
Leonard Richardson
The Maturity Heuristic
![Page 9: HATEOAS - Arquitetura REST 100% aderente](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/9.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/10.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/11.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/12.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/13.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/14.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/15.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/16.jpg)
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](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/17.jpg)
HATEOASFrameworks
&HAL
![Page 18: HATEOAS - Arquitetura REST 100% aderente](https://reader036.fdocument.pub/reader036/viewer/2022081511/5584d254d8b42aeb138b5207/html5/thumbnails/18.jpg)
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