restful webservices lucas batistussi – 8440792 thiago gottardi – 8428398

33
S RESTful Webservices Lucas Batistussi 8440792 Thiago Gottardi 8428398

Upload: internet

Post on 21-Apr-2015

149 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

S

RESTful Webservices

Lucas Batistussi – 8440792

Thiago Gottardi – 8428398

Page 2: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

Roteiro

Introdução Web Service SOAP HTTP REST

Exemplos de REST

Apresentação Prática

Aula Prática

Page 3: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

Web Service

Uma aplicação servidora que permite interação de máquinas sobre a rede.

Forma interoperável de transmitir dados.

A Web service is a software system designed to support interoperable machine-to-machine interaction over a network.

http://www.w3.org/TR/2004/NOTE-ws-gloss-20040211/#webservice

Page 4: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

SOAP

Padrão mais completo que REST para webservice;

Tráfego mensagens sobre HTTP ou outro protocolo;

Simple Object Access Protocol – Protocolo Simples de Acesso a Objetos;

Representa recursos utilizando documento estruturado XML (wsdl).

Page 5: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

Exemplo SOAP

Page 6: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

SOAP

Desvantagens do SOAP: Envelopes geram muito tráfego; Pouco inteligível para humanos;

Proposta REST: Utilizar outros métodos HTTP para diminuir:

Trafego; Tamanho da URL.

Page 7: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

HTTP

Protocolo de Transmissão de Hipertexto 1.1 (RFC 2616) URI:

http://servidor/caminho_do_recurso O cliente conecta-se ao servidor e solicita o recurso;

Fonte: http://datatracker.ietf.org/doc/rfc2616/

Page 8: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

HTTP

Protocolo de Transmissão de Hipertexto 1.1 (RFC 2616) GET:

Permite a um cliente (ex: browser) requisitar uma informação:

Fonte: http://datatracker.ietf.org/doc/rfc2616/

GET /caminho/recurso/instancia HTTP/1.1 From: usuario@enderecoUser-Agent: NavegadorContent-Type: text/html

HTTP/1.1 200 OK Date: Wed, 4 Jun 2013 23:59:59 GMTContent-Type: text/html; charset=utf-8Content-Length: 1354

Cliente

Servidor

Page 9: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398
Page 10: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

HTTP

Protocolo de Transmissão de Hipertexto 1.1 (RFC 2616) POST:

Permite a um cliente (ex: browser) postar uma informação:

Fonte: http://datatracker.ietf.org/doc/rfc2616/

POST /caminho/recurso/instancia HTTP/1.1 From: usuario@enderecoUser-Agent: NavegadorContent-Type: application/x-www-form-urlencoded Content-Length: 30 nome=Thiago&numerousp=8428393

HTTP/1.1 200 OK

Cliente

Servidor

Page 11: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398
Page 12: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

HTTP

Protocolo de Transmissão de Hipertexto 1.1 (RFC 2616) DELETE:

Permite a um cliente remover instancia de recurso no servidor:

DELETE /caminho/recurso/instancia HTTP/1.1 From: usuario@enderecoUser-Agent: Navegador

HTTP/1.1 200 OK

Cliente

Servidor

Page 13: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

HTTP

Método DELETE Deletar um recurso Não é suportado pela maioria dos browsers en

forms XMLHttpRequest (AJAX calls) OK Solução: utilizar o método POST e um parâmetro de

formulário do tipo “hidden”, como “_method” com o valor correspondente ao método!

Page 14: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

<form action="/posts/xxxxx" method="POST">

<input type="hidden" name="_method" value="DELETE">

<input type="submit" value="delete">

</form>

Solução

Page 15: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

HTTP

Protocolo de Transmissão de Hipertexto 1.1 (RFC 2616) PUT:

Permite a um cliente colocar instancia de recurso no servidor:

PUT /caminho/recurso/ HTTP/1.1 From: usuario@enderecoUser-Agent: NavegadorContent-Type: application/xml Content-Length: 89 <?xml version="1.0" encoding="ISO-8859-1"?><recurso><instancia>Olá</instancia></recurso>

HTTP/1.1 200 OK

Cliente

Servidor

Page 16: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

HTTP

Método PUT Inserir um recurso Não é suportado em alguns browsers em Forms XMLHttpRequest (AJAX calls) OK Solução: mesma que a do DELETE!

Page 17: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

REST

Métodos HTTP como PUT e DELETE são raramente usados por browsers e o internet explorer;

Representational State Transfer (REST)

Proposta REST: Fazer uso desses métodos; Estabelecer um padrão inteligível de um recurso:

Introduzido na tese de Roy Fielding (Universidade da Califórnia) (2000) após fazer parte da equipe que definiu o HTTP 1.1;

Conjunto de princípios para o design de Webservices.

Page 18: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

REST

Uso: Recurso como substantivo (URI – Universal Resource Identifier) Ação como verbo (Métodos HTTP – POST, GET, PUT, DELETE,

PATCH); Tipo de Conteúdo (Content-Type MIME).

GET Cacheable GET não afeta conteúdo;

Abstração de camadas Serviços podem ser divididos em N camadas;

“Padrão” Web 2.0;

Usado por websites como: Google, Facebook e Yahoo.

Page 19: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

REST: Recursos

Entidade do sistema

Exposto pela URI

Estrutura hierárquica

URLs limpas e intuitivas, human-readable, easy to remember

http://www.shopping.com/

notebook/mbp

http://www.shopping.com/?product=notebook&model=

mbp

Page 20: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

REST: Recursos

Exemplo de URI conforme ministrada nesta aula:

Endereço completo de um recurso

http://servidor/aplicativo/recurso/

Após a barra na frente de recurso pode-se especificar vários parâmetros

http://servidor/aplicativo/recurso/parametro/

http://servidor/aplicativo/recurso/parametro/parametro/

http://servidor/aplicativo/recurso/parametro/parametro/parametro

Etc.

Page 21: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

REST: Combinações

Um servidor pode ter comportamento diferente para cada uma das combinações entre: Caminho; Nome do Recurso; Parâmetros; Método HTTP; Content-Type.

Page 22: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

REST: Estado do Servidor

No REST: GET é usado apenas para pegar informação sem

afetar o conteúdo no servidor; POST insere dados a uma instância de um recurso; PUT insere uma instância de um recurso; DELETE remove uma instância de um recurso;

Page 23: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

Onde está o “erro”?

GET /adduser/name/Lucas HTTP/1.1

GET /users/name/Lucas HTTP/1.1

Page 24: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

Resposta!!!

A opção (1) está incoerente pois altera o estado do servidor adicionando um usuário ao sistema

Na URI /users/name/Lucas o substantivo ou RECURSO é users

Forma REST de adicionar usuário: PUT /users/name/Lucas HTTP/1.1

Page 25: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

Princípios: statelessness

Não guarda informação sobre o estado atual da navegação no servidor (sessão)

Requisição contém todas as informações

Natural do protocolo HTTP!

Page 26: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

Statefull: exemplo

GET /book1 HTTP/1.1

RESPONSE: {“content”:{…}}

prevPage++;nextPage = prevPage;

return nextPage;

Page 27: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

Stateless: exemplo

GET /book1/page/1 HTTP/1.1

RESPONSE: {“next”:2, “content”:{…}}

getPage(1)

Page 28: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

Stateless: vantagens

Economia de recursos do servidor (principalmente memória)

Redução consumo de banda (cache)

Diminuição do tempo de resposta página (cache)

Page 29: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

[{"created_at":"Wed May 22 20:48:37 +0000 2013","id":337309045331460097,"id_str":"337309045331460097","text":"API v1 blackout testing is just about complete. API…. }]

GET https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=twitterapi&count=2

REQUEST

RESPONSE: application/json; charset=utf-8

Exemplo: recuperar tweets de um usuário

Page 30: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

Alguns frameworks com suporte RESTFul

Popular Ruby On Rails Exemplo site: twitter.com

ASP.NET Exemplos sites: microsoft.com, peixeurbano.com.br

vRaptor – brasileiro (USP)

Page 31: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

SOAP x REST

SOAP: Ocupa mais banda (troca mensagens) Mais complexo Machine-readable Maior flexibilidade Segurança Tecnologia consolidada no mercado

Page 32: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

SOAP x REST

REST: Mensagens menores (apenas requisição) Simples Machine+Human-readable Menos recursos que SOAP

Page 33: RESTful Webservices Lucas Batistussi – 8440792 Thiago Gottardi – 8428398

Referências

http://www.ibm.com/developerworks/webservices/library/ws-restful/

http://www.w3.org/TR/soap12-part1/

http://datatracker.ietf.org/doc/rfc2616/

http://www.w3.org/TR/2004/NOTE-ws-gloss-20040211/#webservice