REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet...

25
1 REST Caio Nakashima [email protected] [email protected]

Transcript of REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet...

Page 1: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

1

REST

Caio Nakashima

[email protected]

[email protected]

Page 2: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

RESTful

• REpresentation State Transfer

• Estilo de arquitetura de software para sistemas distribuídos

• Termo proposto por Roy Fielding em sua tese de doutorado

• http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

• Web services com a arquitetura da internet

• Exploração extensa dos recursos do HTTP

Page 3: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Definição

• REST é um conjunto de princípios que definem como Web Standards como HTTP e URIs devem ser usados (o que freqüentemente difere um pouco do que muitas pessoas atualmente fazem). A promessa é que se você aderir a princípios REST enquanto estiver desenhando sua aplicação, você terá um sistema que explora a arquitetura da Web em seu benefício.

Page 4: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Princípios fundamentais

• Dê a todas as coisas um Identificador

• Vincule as coisas

• Utilize métodos padronizados

• Recursos com múltiplas representações

• Comunique sem estado

Page 5: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Dê a todas as "coisas" um ID

• Tudo o que deveria ser identificado deveria obviamente ter um ID – Na Web, há um conceito unificado para IDs: A URI.

• URIs compõe um namespace global,e utilizando URIs para identificar seus recursos chave significa ter um ID único e global.

• http://example.com/customers/1234 http://example.com/orders/2007/10/776654 http://example.com/products/4554 http://example.com/processes/salary-increase-234

Page 6: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Vincule as coisas

<order self="http://example.com/customers/1234">

<amount>23</amount>

<product ref="http://example.com/products/4554">

</product>

<customer ref="http://example.com/customers/1234">

</customer>

</order>

Os links podem apontar para recursos que são oferecidos por uma aplicação diferente, um outro servidor, ou até mesmo em uma empresa diferente em outro continente - porque o esquema de nomes é um padrão global, todos os recursos que compõe a Web podem ser ligados uns aos outros.

Page 7: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

• O fato de que o servidor (ou provedor de serviços, se você preferir) oferece um conjunto de links para o cliente (o consumidor do serviço), permite ao cliente mudar o aplicativo de um estado para outro, através de um link.

• Use liks para referênciar coisas que possam ser identificadas (recursos) sempre que for possível. Hiperlinks são o que fazem a Web ser a Web.

Page 8: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Utilize os métodos padrão

• O HTTP chama verbos, e além dos dois que todo mundo conhece (o GET e o POST), o conjunto de métodos padrão inclui PUT, DELETE, HEAD e OPTIONS.

• O significado de cada um desses métodos é definido na especificação do HTTP, juntamente com algumas garantias sobre o seus comportamentos.

• Um desenvolvedor OO pode imaginar que todo recurso em um cenário HTTP RESTful estende uma classe como essa (em alguma pseudo-sintaxe no estilo Java/C# concentrando-se nos métodos principais):

Page 9: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Exemplo

class Resource {

Resource(URI u);

Response get();

Response post(Request r);

Response put(Request r);

Response delete();

}

Como a semântica do GET é definida na especificação, você pode ter certeza que tem obrigações quando chamá-lo - é por isso que o método é chamado de "seguro".

O GET suporta caching de forma muito eficiente e sofisticada, em muitos casos, você nem sequer precisa enviar uma requisição ao servidor.

Page 10: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

• Se você expuser as funcionalidades do seu aplicativo (ou funcionalidades do serviço, ser você preferir) do modo RESTful, esse princípio e suas restrições se aplicam a você também.

• Isso é difícil de aceitar se você estiver acostumado com uma abordagem de design diferente - afinal, você esta provavelmente convencido de que seu aplicativo tem muito mais lógica do que é expressado com operações manuais.

Page 11: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,
Page 12: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,
Page 13: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

• A interface uniforme também permite que qualquer componente que entenda o protocolo de aplicação HTTP interaja com seu aplicativo.

• Exemplos de componentes que são beneficiados por isso são clientes genéricos como o curl, o wget, proxies, caches, servidores HTTP, gateways e até mesmo o Google, o Yahoo!, o MSN e muitos outros.

• Para que clientes possam interagir com seus recursos, eles devem implementar o protocolo de aplicação padrão (HTTP) corretamente, isto é, utilizar os métodos padrão: GET, PUT, POST e DELETE.

Page 14: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Recursos com múltiplas representações

• Como é que um cliente saberá como lidar com os dados que obtém, por exemplo, como resultado de uma requisição GET ou POST?

• A abordagem do HTTP permite uma separação entre as responsabilidades de manipulação de dados e invocação de operações.

• Em outras palavras, um cliente que sabe como lidar com um formato específico de dados pode interagir com todos os recursos que possam oferecer uma representação nesse formato.

• Utilizando a negociação de conteúdo HTTP, um cliente pode solicitar por uma representação em um formato específico:

Page 15: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

GET /customers/1234 HTTP/1.1

Host: example.com

Accept: application/vnd.mycompany.customer+xml

O resultado pode ser um XML em algum formato específico de um empresa que representa os dados de um cliente.

GET /customers/1234 HTTP/1.1

Host: example.com

Accept: text/x-vcard

O resultado poderia ser o endereço de um cliente no formato vCard.

Page 16: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Comunique sem Estado

• E importante salientar que embora REST inclua a ídeia de "não manter", isso não significa que o aplicativo que exponha suas funcionalidades não possa ter estado - de fato, isso tornaria a abordagem inútil na maioria dos cenários.

• REST exige que o estado seja transformado no estado do recurso ou mantido no cliente.

• Em outras palavras, um servidor não deveria guardar o estado da comunicação de qualquer um dos clientes que se comunique com ele além de uma única requisição.

• A razão mais óbvia para isso é escalabilidade - o número de clientes que podem interagir com o servidor seria consideravelmente impactado se fosse preciso manter o estado do cliente.

Page 17: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Origem

• Roy Fielding é um dos principais autores do protocolo HTTP, e ele propôs em sua tese de doutorado um estilo de arquitetura que faz extenso uso dos recursos oferecidos por este protocolo.

• Enquanto nos serviços WS os recursos do HTTP são muito pouco explorados (inclusive porque o SOAP é independente de transporte), nos serviços REST umas das principais características é a utilização de muitos recursos do HTTP para elaborar um protocolo de comunicação conciso e claro.

Page 18: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Por que implementar serviços REST

• Protocolos menos complexos

• Mais poder e flexibilidade nas comunicações

• Arquitetura amplamente disponível nas empresas

• Menos overhead de protocolo

• Pontos negativos

• Integrações com produtos fechados WS-*

• Quando WS-Transaction fizer sentido

• Quando WS-Security fizer sentido

• Quando não houver API HTTP razoável no servidor e/ou clientes-alvo

Page 19: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

REST / TCP/IP / WS

• WS-I – Muitas especificações antes das implementações

– Muitos documentos e complexidade para definir as implementações

– Modelo semelhante a waterfall/cascata.

• REST – Conjunto de regras simples

– Especificações criadas após uso maduro

– Especificações por grupos de estudo do IETF

– Modelo incremental de desenvolvimento de padrões / boas práticas.

Page 20: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Arquitetura

• A arquitetura dos web services WS-* se baseia em um protocolo bem definido, com regras precisas quanto ao formato dos dados trafegados e seguindo padrões acordados em consórcios de grandes corporações. Contrastando com isso, arquitetura dos web services REST é radicalmente diferente.

Page 21: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Diferenças

• WS-*: “Já temos o protocolo e os padrões, devemos definir os serviços que vamos oferecer e os documentos que desejamos trocar entre as partes.”

• REST: “Vamos identificar os recursos envolvidos e utilizar extensamente os recursos do HTTP para definir um bom protocolo de interação com estes recursos.”

Page 22: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

Estilo Declarativo x Imperativo

• REST: Clientes interagem com os Recursos através de requisições HTTP GET, PUT, POST e DELETE

• WS-*: Clientes invocam diferentes operações, com conjuntos variados de parâmetros de entrada e saída

Page 23: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

• A URI deve indicar o que se está manipulando e o método (ou verbo) HTTP indicará como você está manipulando.

• A URI /usuario/123456 nos indica que estamos manipulando um usuário específico.

• Sabendo que estamos usando o método HTTP GET, temos a clara indicação de que estamos buscando os dados deste usuário.

• Este estilo de invocação de serviços pode ser considerado Declarativo.

Page 24: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,
Page 25: REST - dainf.ct.utfpr.edu.brcaio/ws/RESTful.pdf · •Web services com a arquitetura da internet •Exploração extensa dos recursos do HTTP . Definição ... preferir) do modo RESTful,

• Nos web services WS-*, a informação da operação que está sendo realizada fica encapsulada no corpo da requisição.

• Mesmo quando a camada de transporte das mensagens SOAP é HTTP, a URI não esclarece de forma alguma a operação envolvida.

• A informação dos serviços disponíveis fica descrita por elementos operation de um documento WSDL, geralmente em um formato fazerEssaOperacao.

• Esta maneira de desenvolver web services é classificada como Imperativa.