REST: Faça o Serviço Direito
-
Upload
alexandre-gaigalas -
Category
Documents
-
view
2.777 -
download
0
description
Transcript of REST: Faça o Serviço Direito
3 de Novembro PHP Conference 2011 1
REST: Faça o Serviço Direito
3 de Novembro PHP Conference 2011 2
Alexandre Gomes Gaigalas
http://about.me/alganet
3 de Novembro PHP Conference 2011 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 4
REST não é apenas para APIs.
3 de Novembro PHP Conference 2011 5
3 de Novembro PHP Conference 2011 6
Roy Fielding
3 de Novembro PHP Conference 2011 7
Arquitetura
Como você organiza elementos de software para alcançar certos objetivos.
3 de Novembro PHP Conference 2011 8
Arquitetura
Como você organiza elementos de software para alcançar certos objetivos.
Dados, componentes e conectores
3 de Novembro PHP Conference 2011 9
Arquitetura
Como você organiza elementos de software para alcançar certos objetivos.
Performance, escalabilidade, simplicidade, extensibilidade
Dados, componentes e conectores
3 de Novembro PHP Conference 2011 10
Arquitetura
Como você organiza elementos de software para alcançar certos objetivos.
Dados, componentes e conectores
Estilo ArquiteturalComo você alcança certos objetivos com
determinadas regras de organização dos elementos de software.
Performance, escalabilidade, simplicidade, extensibilidade
3 de Novembro PHP Conference 2011 11
Arquitetura
Como você organiza elementos de software para alcançar certos objetivos.
REST
Dados, componentes e conectores
Estilo ArquiteturalComo você alcança certos objetivos com
determinadas regras de organização dos elementos de software.
Performance, escalabilidade, simplicidade, extensibilidade
3 de Novembro PHP Conference 2011 12
Regra 1: Cliente-Servidor
● Portabilidade
● Escalabilidade
●
3 de Novembro PHP Conference 2011 13
Regra 1: Cliente-Servidor
● Portabilidade
● Escalabilidade
●
Desktop, Mobile, API, etc.
3 de Novembro PHP Conference 2011 14
Regra 1: Cliente-Servidor
● Portabilidade
● Escalabilidade
●
Múltiplos servidores e clientes
Desktop, Mobile, API, etc.
3 de Novembro PHP Conference 2011 15
Regra 1: Cliente-Servidor
● Portabilidade
● Escalabilidade
●
http://futurefriend.ly
Múltiplos servidores e clientes
Desktop, Mobile, API, etc.
3 de Novembro PHP Conference 2011 16
Ferramentas Cliente-Servidor
● Apache HTTP Server● nginx ● curl ● Zend_Http_Client● github.com/educoder/pest● ...
3 de Novembro PHP Conference 2011 17
Nosso Projeto Imaginário
● Instalação em 10 servidores.● API, Mobile, Desktop.
3 de Novembro PHP Conference 2011 18
Regra 2: Sem Estado
● Visibilidade
● Confiabilidade
● Escalabilidade
3 de Novembro PHP Conference 2011 19
Regra 2: Sem Estado
● Visibilidade
● Confiabilidade
● Escalabilidade
Monitoramento, estatísticas
3 de Novembro PHP Conference 2011 20
Regra 2: Sem Estado
● Visibilidade
● Confiabilidade
● Escalabilidade
Recuperação de falhas simplificada
Monitoramento, estatísticas
3 de Novembro PHP Conference 2011 21
Regra 2: Sem Estado
● Visibilidade
● Confiabilidade
● Escalabilidade
Recuperação de falhas simplificada
Monitoramento, estatísticas
Cache, balanceamento de carga
3 de Novembro PHP Conference 2011 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 23
Regra 3: Cache
● Eficiência
● Performance
● Escalabilidade
3 de Novembro PHP Conference 2011 24
Regra 3: Cache
● Eficiência
● Performance
● Escalabilidade
Menos requisições
3 de Novembro PHP Conference 2011 25
Regra 3: Cache
● Eficiência
● Performance
● Escalabilidade
Menor latência para o cliente
Menos requisições
3 de Novembro PHP Conference 2011 26
Regra 3: Cache
● Eficiência
● Performance
● Escalabilidade
Menor latência para o cliente
Menos requisições
Cache, balanceamento de carga
3 de Novembro PHP Conference 2011 27
Ferramentas para Cache
● nginx ● Varnish Cache● Apache mod_cache● yslow pra testar
3 de Novembro PHP Conference 2011 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 29
Regra 4: Interface Uniforme
● Identificação de Recursos
● Manipulação de Representações
● Mensagens auto-descritivas
● Hipermídia
URIs
HTML, JPG, etc
text/html, image/jpg
Links
3 de Novembro PHP Conference 2011 30
URI
● Identificação universal de recursos
3 de Novembro PHP Conference 2011 31
URI
● Identificação universal de recursos● Desacoplada da representação
3 de Novembro PHP Conference 2011 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://[email protected]/path/arquivo.txt● mailto:[email protected] ● …
3 de Novembro PHP Conference 2011 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://[email protected]/path/arquivo.txt● mailto:[email protected] ● …
● URIs legais não mudam =D
3 de Novembro PHP Conference 2011 34
http://social.yahooapis.com/v1/user/12345/profile
3 de Novembro PHP Conference 2011 35
http://social.yahooapis.com/v1/user/12345/profile
Schema Domain Path
3 de Novembro PHP Conference 2011 36
http://social.yahooapis.com/v1/user/12345/profile
Schema Domain Path
● Representa um perfil
3 de Novembro PHP Conference 2011 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 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 39
REST em JSON é quase impossível.
3 de Novembro PHP Conference 2011 40
Hipermídia
● href=”http://example.org/foobar”
● href=”/foobar”
● href=”//example.org/foobar”
Identificação absoluta
Identificação relativa ao domínio
Identificação relativa ao esquema
3 de Novembro PHP Conference 2011 41
Regra 5: Camadas
● Simplicidade
● Extensibilidade
● Escalabilidade
Firewalls, segurança, proxies
Implementação independente
Cache, balanceamento de carga
3 de Novembro PHP Conference 2011 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 43
Regra 5: Camadas
● Simplicidade
● Extensibilidade
● Escalabilidade
3 de Novembro PHP Conference 2011 44
Regra 5: Camadas
● Simplicidade
● Extensibilidade
● Escalabilidade
Implementação independente
3 de Novembro PHP Conference 2011 45
Regra 5: Camadas
● Simplicidade
● Extensibilidade
● Escalabilidade
Firewalls, segurança, proxies
Implementação independente
3 de Novembro PHP Conference 2011 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 47
Regra Dica 6: Código sob Demanda
● CSS
● Javascript
3 de Novembro PHP Conference 2011 48
Regra Dica 6: Código sob Demanda
● CSS
● JavascriptComportamento
Apresentação
3 de Novembro PHP Conference 2011 49
Regra Dica 6: Código sob Demanda
● CSS● Estilos● Media queries● ...
● JavascriptComportamento
Apresentação
3 de Novembro PHP Conference 2011 50
Regra Dica 6: Código sob Demanda
● CSS● Estilos● Media queries● ...
● Javascript● AJAX● Feature Detection● ...
Comportamento
Apresentação
3 de Novembro PHP Conference 2011 51
Desktop
Mobile
Responsivo é RESTful
3 de Novembro PHP Conference 2011 52
Ferramentas pra Código sob Demanda
● Modernizr (http://modernizr.com)
● Frameless (http://framelessgrid.com)
3 de Novembro PHP Conference 2011 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 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 55
Perguntas?