O documento apresenta os princípios arquiteturais do REST através de 6 regras: cliente-servidor, sem estado, cache, interface uniforme, camadas e código sob demanda. O palestrante explica cada regra e como aplicá-las em um projeto imaginário para melhorar a portabilidade, escalabilidade e simplicidade do sistema.
3. Hoje você vai ver...
●
Conceito: Por quê usar REST?
●
Projeto: REST desde o berço
●
Implementação: Ferramentas e técnicas
3 de Novembro PHP Conference 2011 3
4. REST não é apenas para APIs.
3 de Novembro PHP Conference 2011 4
8. Arquitetura
Dados, componentes e conectores
Como você organiza elementos de software para
alcançar certos objetivos.
3 de Novembro PHP Conference 2011 8
9. Arquitetura
Dados, componentes e conectores
Como você organiza elementos de software para
alcançar certos objetivos.
Performance, escalabilidade, simplicidade, extensibilidade
3 de Novembro PHP Conference 2011 9
10. Arquitetura
Dados, componentes e conectores
Como você organiza elementos de software para
alcançar certos objetivos.
Performance, escalabilidade, simplicidade, extensibilidade
Estilo Arquitetural
Como você alcança certos objetivos com
determinadas regras de organização dos
elementos de software.
3 de Novembro PHP Conference 2011 10
11. Arquitetura
Dados, componentes e conectores
Como você organiza elementos de software para
alcançar certos objetivos.
Performance, escalabilidade, simplicidade, extensibilidade
Estilo Arquitetural REST
Como você alcança certos objetivos com
determinadas regras de organização dos
elementos de software.
3 de Novembro PHP Conference 2011 11
13. Regra 1: Cliente-Servidor
Desktop, Mobile, API, etc.
●
Portabilidade
●
Escalabilidade
●
3 de Novembro PHP Conference 2011 13
14. Regra 1: Cliente-Servidor
Desktop, Mobile, API, etc.
●
Portabilidade
Múltiplos servidores e clientes
●
Escalabilidade
●
3 de Novembro PHP Conference 2011 14
15. Regra 1: Cliente-Servidor
Desktop, Mobile, API, etc.
●
Portabilidade
Múltiplos servidores e clientes
●
Escalabilidade
http://futurefriend.ly
●
3 de Novembro PHP Conference 2011 15
16. Ferramentas Cliente-Servidor
●
Apache HTTP Server
●
nginx
●
curl
●
Zend_Http_Client
●
github.com/educoder/pest
●
...
3 de Novembro PHP Conference 2011 16
17. Nosso Projeto Imaginário
●
Instalação em 10 servidores.
●
API, Mobile, Desktop.
3 de Novembro PHP Conference 2011 17
18. Regra 2: Sem Estado
●
Visibilidade
●
Confiabilidade
●
Escalabilidade
3 de Novembro PHP Conference 2011 18
19. Regra 2: Sem Estado
Monitoramento, estatísticas
●
Visibilidade
●
Confiabilidade
●
Escalabilidade
3 de Novembro PHP Conference 2011 19
20. Regra 2: Sem Estado
Monitoramento, estatísticas
●
Visibilidade
Recuperação de falhas simplificada
●
Confiabilidade
●
Escalabilidade
3 de Novembro PHP Conference 2011 20
21. Regra 2: Sem Estado
Monitoramento, estatísticas
●
Visibilidade
Recuperação de falhas simplificada
●
Confiabilidade
Cache, balanceamento de carga
●
Escalabilidade
3 de Novembro PHP Conference 2011 21
22. Nosso Projeto Imaginário
●
Instalação em 10 servidores.
●
API, Mobile, Desktop.
●
Autenticação via Digest/OAuth.
●
Página auxiliar para navegadores.
3 de Novembro PHP Conference 2011 22
23. Regra 3: Cache
●
Eficiência
●
Performance
●
Escalabilidade
3 de Novembro PHP Conference 2011 23
24. Regra 3: Cache
Menos requisições
●
Eficiência
●
Performance
●
Escalabilidade
3 de Novembro PHP Conference 2011 24
25. Regra 3: Cache
Menos requisições
●
Eficiência
Menor latência para o cliente
●
Performance
●
Escalabilidade
3 de Novembro PHP Conference 2011 25
26. Regra 3: Cache
Menos requisições
●
Eficiência
Menor latência para o cliente
●
Performance
Cache, balanceamento de carga
●
Escalabilidade
3 de Novembro PHP Conference 2011 26
27. Ferramentas para Cache
●
nginx
●
Varnish Cache
●
Apache mod_cache
●
yslow pra testar
3 de Novembro PHP Conference 2011 27
28. Nosso Projeto Imaginário
●
Instalação em 10 servidores.
●
API, Mobile, Desktop.
●
Autenticação via Digest/OAuth.
●
Página auxiliar para navegadores.
●
Headers para cache.
3 de Novembro PHP Conference 2011 28
29. Regra 4: Interface Uniforme
●
Identificação de Recursos URIs
●
Manipulação de Representações HTML, JPG, etc
●
Mensagens auto-descritivas text/html, image/jpg
●
Hipermídia Links
3 de Novembro PHP Conference 2011 29
30. URI
●
Identificação universal de recursos
3 de Novembro PHP Conference 2011 30
31. URI
●
Identificação universal de recursos
●
Desacoplada da representação
3 de Novembro PHP Conference 2011 31
32. URI
●
Identificação universal de recursos
●
Desacoplada da representação
●
Vários esquemas de identificação
●
http://dominio.com/path?query=123#hash
●
ftp://user@server.net/path/arquivo.txt
●
mailto:alexandre@gaigalas.net
●
…
3 de Novembro PHP Conference 2011 32
33. URI
●
Identificação universal de recursos
●
Desacoplada da representação
●
Vários esquemas de identificação
●
http://dominio.com/path?query=123#hash
●
ftp://user@server.net/path/arquivo.txt
●
mailto:alexandre@gaigalas.net
●
…
●
URIs legais não mudam =D
3 de Novembro PHP Conference 2011 33
37. http://social.yahooapis.com/v1/user/12345/profile
Schema Domain Path
●
Representa um perfil
●
Desacoplado do formato de resposta
●
Compreende negociação de conteúdo
3 de Novembro PHP Conference 2011 37
38. http://social.yahooapis.com/v1/user/12345/profile
Schema Domain Path
●
Representa um perfil
●
Desacoplado do formato de resposta
●
Compreende negociação de conteúdo
●
Abstrai um recurso
●
Aceita GET para obter perfil
●
Aceita POST para atualizar perfil
3 de Novembro PHP Conference 2011 38
39. REST em JSON é quase impossível.
3 de Novembro PHP Conference 2011 39
40. Hipermídia
Identificação absoluta
●
href=”http://example.org/foobar”
Identificação relativa ao domínio
●
href=”/foobar”
Identificação relativa ao esquema
●
href=”//example.org/foobar”
3 de Novembro PHP Conference 2011 40
41. Regra 5: Camadas
Implementação independente
●
Simplicidade
Firewalls, segurança, proxies
●
Extensibilidade
Cache, balanceamento de carga
●
Escalabilidade
3 de Novembro PHP Conference 2011 41
42. Nosso Projeto Imaginário
●
Instalação em 10 servidores.
●
API, Mobile, Desktop.
●
Autenticação via Digest/OAuth.
●
Página auxiliar para navegadores.
●
Headers para cache.
●
Hipermídia HTML e XML.
3 de Novembro PHP Conference 2011 42
43. Regra 5: Camadas
●
Simplicidade
●
Extensibilidade
●
Escalabilidade
3 de Novembro PHP Conference 2011 43
44. Regra 5: Camadas
Implementação independente
●
Simplicidade
●
Extensibilidade
●
Escalabilidade
3 de Novembro PHP Conference 2011 44
46. Nosso Projeto Imaginário
●
Instalação em 10 servidores.
●
API, Mobile, Desktop.
●
Autenticação via Digest/OAuth.
●
Página auxiliar para navegadores.
●
Proxy-reverso e headers para cache.
●
Hipermídia HTML e XML.
3 de Novembro PHP Conference 2011 46
47. Regra Dica 6: Código sob Demanda
●
CSS
●
Javascript
3 de Novembro PHP Conference 2011 47
48. Regra Dica 6: Código sob Demanda
●
CSS Apresentação
●
Javascript
Comportamento
3 de Novembro PHP Conference 2011 48
49. Regra Dica 6: Código sob Demanda
●
CSS Apresentação
●
Estilos
●
Media queries
●
...
●
Javascript
Comportamento
3 de Novembro PHP Conference 2011 49
50. Regra Dica 6: Código sob Demanda
●
CSS Apresentação
●
Estilos
●
Media queries
●
...
●
Javascript
Comportamento
●
AJAX
●
Feature Detection
●
...
3 de Novembro PHP Conference 2011 50
52. Ferramentas pra Código sob
Demanda
●
Modernizr (http://modernizr.com)
●
Frameless (http://framelessgrid.com)
3 de Novembro PHP Conference 2011 52
53. Nosso Projeto Imaginário
●
Instalação em 10 servidores.
●
API, Mobile, Desktop.
●
Autenticação via Digest/OAuth.
●
Página auxiliar para navegadores.
●
Proxy-reverso e headers para cache.
●
Hipermídia HTML e XML.
●
Versão Mobile/Desktop via Javascript sob
demanda
3 de Novembro PHP Conference 2011 53
54. Hoje você viu...
●
Conceito: Por quê usar REST?
●
Projeto: REST desde o berço
●
Implementação: Ferramentas e técnicas
3 de Novembro PHP Conference 2011 54