$30 off During Our Annual Pro Sale. View Details »

REST: Faça o Serviço Direito 3.0

REST: Faça o Serviço Direito 3.0

Uma explicação sobre REST e Hipermídia, sua evolução histórica e exemplos naturais de seu uso com foco em resolução de problemas.

Alexandre Gaigalas

June 14, 2012
Tweet

More Decks by Alexandre Gaigalas

Other Decks in Programming

Transcript

  1. 14 de Junho VII Congresso Científico Uniararas 1 REST: Faça

    o Serviço Direito 3.0
  2. 14 de Junho VII Congresso Científico Uniararas 2 Alexandre Gomes

    Gaigalas http://about.me/alganet Augusto Pascutti http://about.me/augustohp
  3. 14 de Junho VII Congresso Científico Uniararas 3 Saiba mais

    sobre REST.
  4. 14 de Junho VII Congresso Científico Uniararas 4 Saiba mais

    sobre REST. Links são referências
  5. 14 de Junho VII Congresso Científico Uniararas 5 1. G.

    D. Abowd, R. Allen, and D. Garlan. Formalizing style to understand descriptions of software architecture. ACM Transactions on Software Engineering and Methodology, 4(4), Oct. 1995, pp. 319–364. A shorter version also appeared as: Using style to understand descriptions of software architecture. In Proceedings of the First ACM SIGSOFT Symposium on the Foundations of Software Engineering (SIGSOFT‘93), Los Angeles, CA, Dec. 1993, pp. 9–20.
  6. 14 de Junho VII Congresso Científico Uniararas 6 1. G.

    D. Abowd, R. Allen, and D. Garlan. Formalizing style to understand descriptions of software architecture. ACM Transactions on Software Engineering and Methodology, 4(4), Oct. 1995, pp. 319–364. A shorter version also appeared as: Using style to understand descriptions of software architecture. In Proceedings of the First ACM SIGSOFT Symposium on the Foundations of Software Engineering (SIGSOFT‘93), Los Angeles, CA, Dec. 1993, pp. 9–20. Antes elas eram assim
  7. 14 de Junho VII Congresso Científico Uniararas 7 Referências ==

    URIs
  8. 14 de Junho VII Congresso Científico Uniararas 8 Hipermídia

  9. 14 de Junho VII Congresso Científico Uniararas 9 Hipermídia Referências

  10. 14 de Junho VII Congresso Científico Uniararas 10 Hipermídia Referências

    Imagens
  11. 14 de Junho VII Congresso Científico Uniararas 11 Hipermídia Links

    Imagens Aparência
  12. 14 de Junho VII Congresso Científico Uniararas 12 Hipermídia Referências

    Referências Referências
  13. 14 de Junho VII Congresso Científico Uniararas 13 1. G.

    D. Abowd, R. Allen, and D. Garlan. Formalizing style to understand descriptions of software architecture. ACM Transactions on Software Engineering and Methodology, 4(4), Oct. 1995, pp. 319–364. A shorter version also appeared as: Using style to understand descriptions of software architecture. In Proceedings of the First ACM SIGSOFT Symposium on the Foundations of Software Engineering (SIGSOFT‘93), Los Angeles, CA, Dec. 1993, pp. 9–20.
  14. 14 de Junho VII Congresso Científico Uniararas 14 1. G.

    D. Abowd, R. Allen, and D. Garlan. Formalizing style to understand descriptions of software architecture. ACM Transactions on Software Engineering and Methodology, 4(4), Oct. 1995, pp. 319–364. A shorter version also appeared as: Using style to understand descriptions of software architecture. In Proceedings of the First ACM SIGSOFT Symposium on the Foundations of Software Engineering (SIGSOFT‘93), Los Angeles, CA, Dec. 1993, pp. 9–20.
  15. 14 de Junho VII Congresso Científico Uniararas 15 1. G.

    D. Abowd, R. Allen, and D. Garlan. Formalizing style to understand descriptions of software architecture. ACM Transactions on Software Engineering and Methodology, 4(4), Oct. 1995, pp. 319–364. A shorter version also appeared as: Using style to understand descriptions of software architecture. In Proceedings of the First ACM SIGSOFT Symposium on the Foundations of Software Engineering (SIGSOFT‘93), Los Angeles, CA, Dec. 1993, pp. 9–20.
  16. 14 de Junho VII Congresso Científico Uniararas 16 URIs apontam

    pra conceitos
  17. 14 de Junho VII Congresso Científico Uniararas 17 URIs apontam

    pra conceitos idéias
  18. 14 de Junho VII Congresso Científico Uniararas 18 URIs apontam

    pra conceitos coisas idéias
  19. 14 de Junho VII Congresso Científico Uniararas 19 URIs apontam

    pra conceitos coisas idéias pessoas
  20. 14 de Junho VII Congresso Científico Uniararas 20 URIs apontam

    pra conceitos coisas idéias pessoas lugares
  21. 14 de Junho VII Congresso Científico Uniararas 21 URIs apontam

    pra conceitos coisas idéias pessoas lugares eventos
  22. 14 de Junho VII Congresso Científico Uniararas 22 Uniform Resource

    Identifier (Identificador Uniforme de Recursos) • http://www.google.com • http://www.google.com/search?q=rest • ftp://user:password@geoticies.com • mailto:alexandre@gaigalas.net
  23. 14 de Junho VII Congresso Científico Uniararas 23

  24. 14 de Junho VII Congresso Científico Uniararas 24 <link href=”http://...”>

    <a href=”mailto://...”> <img src=”http://...”> <script src=”http://...”> {“links”:[{“href”:”...”}] } <link href=”http://...”> <a href=”mailto://...”> <img src=”http://...”> <script src=”http://...”> {“links”:[{“href”:”...”}] }
  25. 14 de Junho VII Congresso Científico Uniararas 25 <link href=”http://...”>

    <a href=”mailto://...”> <img src=”http://...”> <script src=”http://...”> {“links”:[{“href”:”...”}] } HTML/XML JSON-Schema (draft) <link href=”http://...”> <a href=”mailto://...”> <img src=”http://...”> <script src=”http://...”> {“links”:[{“href”:”...”}] } HTML/XML JSON-Schema (draft)
  26. 14 de Junho VII Congresso Científico Uniararas 26 GET /search?q=rest

    Host: google.com Accept-Language: pt-BR, * <!doctype... <html... <head... <body... Documento Cabeçalho da requisição
  27. 14 de Junho VII Congresso Científico Uniararas 27 GET /search?q=rest

    Host: google.com Accept-Language: pt-BR, * <!doctype... <html... <head... <body... Documento Cabeçalho da requisição Cabeçalho do documento
  28. 14 de Junho VII Congresso Científico Uniararas 28 GET /photos/80gmf7

    Host: mypictures.com Accept-Language: pt-BR, * Accept: text/html, image/jpeg, */* Documento Cabeçalho da requisição
  29. 14 de Junho VII Congresso Científico Uniararas 29 GET /photos/80gmf7

    Host: mypictures.com Accept-Language: pt-BR, * Accept: text/html, image/jpeg, */* Documento Cabeçalho da requisição Cervejas Belgas - Delirium Tremens - Delirium Nocturnum - Kasteel - Gouden Carolus
  30. 14 de Junho VII Congresso Científico Uniararas 30 GET /photos/80gmf7

    Host: mypictures.com Accept-Language: pt-BR, * Accept: text/html, image/jpeg, */* Documento Cabeçalho da requisição Cervejas Belgas - Delirium Tremens - Delirium Nocturnum - Kasteel - Gouden Carolus
  31. 14 de Junho VII Congresso Científico Uniararas 31 Cervejas Belgas

    - Delirium Tremens - Delirium Nocturnum - Kasteel - Gouden Carolus Hiperlinks para as cervejas Imagem rica das cervejas
  32. 14 de Junho VII Congresso Científico Uniararas 32 POST /cervejas/

    Host: 1001cervejas.com nome=Duvel&pais=Belgica --- Cabeçalho da requisição Multipart
  33. 14 de Junho VII Congresso Científico Uniararas 33 GET /cervejas/duvel

    Host: 1001cervejas.com Accept-Language: pt-BR, * Accept: text/html, image/jpeg, */* Documento Cabeçalho da requisição Duvel – Bélgica Mais da Bélgica: - Delirium Tremens - Delirium Nocturnum - Kasteel - Gouden Carolus HTTP/1.1 201 Created Location: /cervejas/duvel
  34. 14 de Junho VII Congresso Científico Uniararas 34 Cada formato

    é uma representação diferente
  35. 14 de Junho VII Congresso Científico Uniararas 35 Negociação de

    Conteúdo • Formato – text/html, video/mpeg, etc... • Idioma – en-US, pt-BR, etc... • Charset – UTF-8, ISO-8859-1 • Encoding – gzip, deflate • Range – bytes • X-Etc... – Qualquer coisa :)
  36. 14 de Junho VII Congresso Científico Uniararas 36 Servidor Clientes

    Trabalho! Arquitetura Cliente-Servidor
  37. 14 de Junho VII Congresso Científico Uniararas 37 Evitar retrabalho

    é vital em REST
  38. 14 de Junho VII Congresso Científico Uniararas 38 Servidor Clientes

    Cache Cache do Cliente
  39. 14 de Junho VII Congresso Científico Uniararas 39 Servidor Clientes

    Proxy Cache Cache na Transferência
  40. 14 de Junho VII Congresso Científico Uniararas 40 Cache é

    vital para REST
  41. 14 de Junho VII Congresso Científico Uniararas 41 HTTP/1.1 200

    Ok GET /about Sem cache
  42. 14 de Junho VII Congresso Científico Uniararas 42 (from cache)

    GET /about Cache local (no cliente)
  43. 14 de Junho VII Congresso Científico Uniararas 43 HTTP/1.1 200

    Ok GET /about Proxy Cache na Transferência
  44. 14 de Junho VII Congresso Científico Uniararas 44 Servidor Clientes

    Arquitetura em Camadas Proxies
  45. 14 de Junho VII Congresso Científico Uniararas 45 Arquitetura em

    Camadas Cache Auth Estatísticas
  46. 14 de Junho VII Congresso Científico Uniararas 46 Arquitetura em

    Camadas Cache Auth Estatísticas
  47. 14 de Junho VII Congresso Científico Uniararas 47 O estado

    do cliente não deve ficar no servidor
  48. 14 de Junho VII Congresso Científico Uniararas 48 O estado

    do cliente não deve ficar no servidor (nem em proxy algum)
  49. 14 de Junho VII Congresso Científico Uniararas 49 Exemplos de

    estado do cliente • Autenticação • Operações com múltiplas etapas • Histórico de Navegação
  50. 14 de Junho VII Congresso Científico Uniararas 50 Stateful •

    O servidor sabe se o cliente está logado. • O servidor controla o carrinho de compras. • Uma requisição pode retornar coisas diferentes para clientes diferentes. • O servidor sempre verifica credenciais. • O cliente controla o carrinho de compras. • Uma requisição deve retornar exatamente a mesma coisa para clientes diferentes. Stateless
  51. 14 de Junho VII Congresso Científico Uniararas 51 Stateful •

    O servidor sabe se o cliente está logado. • O servidor controla o carrinho de compras. • Uma requisição pode retornar coisas diferentes para clientes diferentes. • O servidor sempre verifica credenciais. • O cliente controla o carrinho de compras. • Uma requisição deve retornar exatamente a mesma coisa para clientes diferentes. Stateless Local Storage, AJAX, etc... Sessões, Databases, etc...
  52. 14 de Junho VII Congresso Científico Uniararas 52 Stateful •

    O servidor sabe se o cliente está logado. • O servidor controla o carrinho de compras. • Uma requisição pode retornar coisas diferentes para clientes diferentes. • O servidor sempre verifica credenciais. • O cliente controla o carrinho de compras. • Uma requisição deve retornar exatamente a mesma coisa para clientes diferentes. Stateless Local Storage, AJAX, etc... Sessões, Databases, etc... /home /alganet/dashboard
  53. 14 de Junho VII Congresso Científico Uniararas 53 Stateful •

    O servidor sabe se o cliente está logado. • O servidor controla o carrinho de compras. • Uma requisição pode retornar coisas diferentes para clientes diferentes. • O servidor sempre verifica credenciais. • O cliente controla o carrinho de compras. • Uma requisição deve retornar exatamente a mesma coisa para clientes diferentes. Stateless Local Storage, AJAX, etc... Sessões, Databases, etc... /home /alganet/dashboard
  54. 14 de Junho VII Congresso Científico Uniararas 54 Código sob

    demanda <link href=”http://...”> <a href=”mailto://...”> <img src=”http://...”> <script src=”http://...”>
  55. 14 de Junho VII Congresso Científico Uniararas 55 • CSS

    • Javascript Código sob demanda
  56. 14 de Junho VII Congresso Científico Uniararas 56 • CSS

    • Javascript Comportamento Apresentação Código sob demanda
  57. 14 de Junho VII Congresso Científico Uniararas 57 • CSS

    • Estilos • Media queries • ... • Javascript Comportamento Apresentação Código sob demanda
  58. 14 de Junho VII Congresso Científico Uniararas 58 • CSS

    • Estilos • Media queries • ... • Javascript • AJAX • Feature Detection • ... Comportamento Apresentação Código sob demanda
  59. 14 de Junho VII Congresso Científico Uniararas 59 Desktop Mobile

    Responsivo é RESTful
  60. 14 de Junho VII Congresso Científico Uniararas 60 REST não

    é apenas para APIs.
  61. 14 de Junho VII Congresso Científico Uniararas 61 Roy Fielding

  62. 14 de Junho VII Congresso Científico Uniararas 62 Arquitetura Como

    você organiza elementos de software para alcançar certos objetivos.
  63. 14 de Junho VII Congresso Científico Uniararas 63 Arquitetura Como

    você organiza elementos de software para alcançar certos objetivos. Dados, componentes e conectores
  64. 14 de Junho VII Congresso Científico Uniararas 64 Arquitetura Como

    você organiza elementos de software para alcançar certos objetivos. Performance, escalabilidade, simplicidade, extensibilidade Dados, componentes e conectores
  65. 14 de Junho VII Congresso Científico Uniararas 65 Arquitetura Como

    você organiza elementos de software para alcançar certos objetivos. Dados, componentes e conectores Estilo Arquitetural Como você alcança certos objetivos com determinadas regras de organização dos elementos de software. Performance, escalabilidade, simplicidade, extensibilidade
  66. 14 de Junho VII Congresso Científico Uniararas 66 Hoje você

    viu... • URI: Interface Uniforme • Ausência de estado no protocolo • Cache • Camadas • Hipermídia • Código sob demanda • O que é REST.
  67. 14 de Junho VII Congresso Científico Uniararas 67 Perguntas?

  68. 14 de Junho VII Congresso Científico Uniararas 68 Obrigado! http://joind.in/talk/view/6693

    Avaliação e slides! ←
  69. 14 de Junho VII Congresso Científico Uniararas 69

  70. 14 de Junho VII Congresso Científico Uniararas 70 Obrigado!