HATEOAS - Arquitetura REST 100% aderente

2.917 visualizações

Publicada em

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

Publicada em: Tecnologia
  • Seja o primeiro a comentar

HATEOAS - Arquitetura REST 100% aderente

  1. 1. { 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’ } }
  2. 2. REST REpresentational State Transfer (Transferência de Estado Representativo)
  3. 3. 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
  4. 4. Proibida a utilização de rescrita de URL para manter o estado. Por favor, não insista. URL REWRITE Uso sim, e daí?
  5. 5. Mas quem escreve serviços RESTFul de verdade??? Você já leu a tese de doutorado do Dr. Roy Fielding?
  6. 6. 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
  7. 7. Quatro Princípios Protocolo Cliente/Servidor sem Estado Sintaxe universal para identificar os recursos Conjunto de operações bem definidas Uso de Hipermídias HTTP contém todas as informações Múltiplos Endpoints através de rotas GET, POST, DELETE, PUT Proposta HATEOAS 100 % Compliance
  8. 8. Proposta HATEOAS Leonard Richardson 2008 The Maturity Heuristic
  9. 9. Uso de Hipermídias Conjunto de operações bem definidas Sintaxe universal para identificar os recursos Protocolo Cliente/Servidor sem Estado Richardson Maturity Model
  10. 10. Protocolo Cliente/Servidor sem Estado Sintaxe universal para identificar os recursos Conjunto de operações bem definidas Uso de Hipermídias Level 0: Uma única URI e um único HTTP method Não chamem isto de REST em respeito ao criador da arquitetura! POST http://domain.me/aceitamostudoservice HTTP/1.1 200 OK { gravarProdutoRequest : { nome : ‘titulo’, categoria: ‘livro’ } } { id_produto: 1044, nome: ‘titulo’, categoria: ‘livro’, status : ‘INCLUIDO’ } POST http://domain.me/aceitamostudoservice HTTP/1.1 200 OK { alterarClienteRequest : { id_cliente : 123, nome: ‘Ele mesmo’, telefone: ‘11 4444-3333’ } } { id_cliente: 123, nome: ‘Ele mesmo’, telefone: ’11 4444-3333’, status : ‘ALTERADO’ }
  11. 11. Protocolo Cliente/Servidor sem Estado Sintaxe universal para identificar os recursos Conjunto de operações bem definidas Uso de Hipermídias Level 1: Diversas URI e um único HTTP method Já está melhorando... POST http://api.domain.me/produto/gravar HTTP/1.1 200 OK { { nome : ‘titulo’, categoria: ‘livro’ id_produto: 1044, nome: ‘titulo’, categoria: ‘livro’, status : ‘INCLUIDO’ } } POST http://api.domain.me/cliente/123/alterar HTTP/1.1 200 OK { { nome: ‘Ele mesmo’, telefone: ‘11 4444-3333’ id_cliente: 123, nome: ‘Ele mesmo’, telefone: ’11 4444-3333’, status : ‘ALTERADO’ } }
  12. 12. Protocolo Cliente/Servidor sem Estado Sintaxe universal para identificar os recursos Conjunto de operações bem definidas Uso de Hipermídias Level 2: Diversas URI e diversos HTTP methods Este é o cenário mais comum. Estamos quase lá! POST http://api.domain.me/produto HTTP/1.1 200 OK { { nome : ‘titulo’, categoria: ‘livro’ id_produto: 1044, nome: ‘titulo’, categoria: ‘livro’, status : ‘INCLUIDO’ } } PUT http://api.domain.me/cliente/123 HTTP/1.1 200 OK { { nome: ‘Ele mesmo’, telefone: ‘11 4444-3333’ id_cliente: 123, nome: ‘Ele mesmo’, telefone: ’11 4444-3333’, status : ‘ALTERADO’ } }
  13. 13. Protocolo Cliente/Servidor sem Estado Sintaxe universal para identificar os recursos Conjunto de operações bem definidas Uso de Hipermídias Level 3: HATEOAS Hypermedia As The Engine Of Application State > 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
  14. 14. Protocolo Cliente/Servidor sem Estado Sintaxe universal para identificar os recursos Conjunto de operações bem definidas Level 3: HATEOAS Netflix = 100% REST Compliance Uso de Hipermídias
  15. 15. Protocolo Cliente/Servidor sem Estado Sintaxe universal para identificar os recursos Conjunto de operações bem definidas Uso de Hipermídias Level 3: HATEOAS Show! > 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
  16. 16. Protocolo Cliente/Servidor sem Estado Sintaxe universal para identificar os recursos Conjunto de operações bem definidas Uso de Hipermídias Level 3: HATEOAS Como ficaria no nosso caso? 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’, }
  17. 17. HATEOAS Frameworks & HAL
  18. 18. THE END http://pt.wikipedia.org/wiki/REST http://martinfowler.com/articles/richardsonMaturityModel.html http://www.crummy.com/writing/speaking/2008-QCon/act3.html http://msdn.microsoft.com/en-us/magazine/jj883957.aspx http://www.infoq.com/news/2013/05/spring-hateoas-rest http://stateless.co/hal_specification.html Evandro Venancio evandro.venancio@gmail.com @evenancio

×