• Nenhum resultado encontrado

Projecto Integrador. Introdução ao REST. Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 1

N/A
N/A
Protected

Academic year: 2021

Share "Projecto Integrador. Introdução ao REST. Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 1"

Copied!
35
0
0

Texto

(1)

Projecto  Integrador

(2)

Notas

§

Imagens do  livro:

§

G.  Alonso  et.  Al.  Web  Services:   Concepts,  Architectures   and  Applications,  

(3)

Sumário

§

REST:  modelo

§

REST:  protocolos

§

REST:  programação

(4)

Contexto

§

Sistema de  informação pervasivos

§

Necessidade de  fornecer serviços

§

Necessidade de  aceder a  serviços

(5)
(6)
(7)

Leitura Fortemente Recomendada

§

A  RESTful Web  service,  an  example  

(8)

REST:  Representational  State  Transfer  

§

Estilo ou padrão arquitectural,  não um  sistema de  desenvolvimento;; não

uma especificação ou normalização

formal.

§

Aproximação:  vê uma aplicação como uma colecção de  recursos

§

Um  recurso é identificado por um  URI/URL

§

Um  URL  devolve  um  documento com  a  representação do  recurso

§

Um  URL  pode referir uma colecção de  recursos

§

Podem-­se  fazer referências a  outros  recursos usando

ligações (links)

§

Aproximação proposta por Roy  Fielding  na sua tese de  doutoramento

§

Não como uma alternativa aos web  services,   mas como uma forma  de  

(9)

REST:  princípios  de  desenho

§

Protocolo cliente/servidor stateless:  cada pedido contém toda a  

informação necessária para ser  processado

§

Objectivo:  tornar o sistema simples.

§

Recursos:  no  sistema tudo são recursos,  identificados por um  URI/URL.

§

Recursos tipicamente armazenados num  formato estruturado que suporta

hiper-­ligações (e.g.  XML)

§

Interface  uniforme:  todos os recursos são acedidos por um  conjunto de  

operações HTTP  bem-­definidas

§

POST  – criar

§

GET  – let

§

PUT  – atualizar/substituir

§

DELETE  – remover

(10)

REST:  princípios  de  desenho

§

Usa HTTP  GET,  POST,  etc.,  mas

§

Usa dados  bem-­tipados (e.g.,  usando schemas  XML,  json)

§

Cache:  para melhorar desempenho,  respostas podem ser  etiquetadas

(11)

A  salientar…

§

Aspectos determinantes:  stateless  &  cacheable,  web-­oriented

§

Rentabiliza a  vasta experiência,  maturidade e  o  investimento prévio na

infraestrutura envolvente da  web:  servidores,  proxies,  caches,  software,  

bibliotecas,  etc.  

(12)

Mais  detalhes  e  exemplo

§

Um  exemplo (de  Roger  L.  Costello)

§

Uma empresa pretende disponibilizar web  services  REST  para permitir aos

seus clientes:

§

Obter uma lista de  peças

§

Obter informação detalhada sobre uma peça

(13)

Exemplo:  listagem

§

Tornar uma lista de  peças disponível como um  recurso

§

GET  http://www.parts-­depot.com/parts

<?xml version="1.0"?>

<p:Parts xmlns:p="http://www.parts-depot.com"

xmlns:xlink="http://www.w3.org/1999/xlink">

<Part id="00345" xlink:href="http://www.parts-depot.com/parts/00345"/>

<Part id="00346" xlink:href="http://www.parts-depot.com/parts/00346"/>

<Part id="00348" xlink:href="http://www.parts-depot.com/parts/00348"/>

</p:Parts>

(14)

Exemplo:  obter informação sobre entidade

§

Obter detalhes sobre uma peça

GET  http://www.parts-­depot.com/parts/00345?flavor=xml

<?xml version="1.0"?>

<p:Part xmlns:p="http://www.parts-depot.com"

xmlns:xlink="http://www.w3.org/1999/xlink">

<Part-ID>00345</Part-ID>

<Name>Widget-A</Name>

<Description>This part is used within the frap

assembly</Description>

<Specification

xlink:href="http://www.parts-depot.com/parts/00345/specification"/>

<UnitCost currency="USD">0.10</UnitCost>

<Quantity>10</Quantity>

</p:Part>

(15)

Exemplo:  criar informação

§

Submeter uma ordem de  compra

POST  http://www.parts-­depot.com/order

<?xml version="1.0"?>

<p:Order xmlns:p="http://www.parts-depot.com"

xmlns:xlink="http://www.w3.org/1999/xlink">

<Part-ID>00345</Part-ID>

<UnitCost currency="USD">0.10</UnitCost>

<Quantity>10</Quantity>

</p:Part>

(16)

Exemplo:  listagem com  filtragem /  pesquisa

§

Tornar uma lista de  peças disponível como um  recurso

GET  http://www.parts-­depot.com/parts?query=hammer

GET  http://www.parts-­depot.com/parts/hammer

<?xml version="1.0"?>

<p:Parts xmlns:p="http://www.parts-depot.com"

xmlns:xlink="http://www.w3.org/1999/xlink">

<Part id="00345" xlink:href="http://www.parts-depot.com/parts/00345"/>

</p:Parts>

(17)

Exemplo:  listagem com  filtragem

§

Lista de  ordens de  compra dum utilizador

GET  http://www.parts-­depot.com/nuno/order

GET  http://www.parts-­depot.com/order/nuno

<?xml version="1.0"?>

<p:Orders xmlns:p="http://www.parts-depot.com"

xmlns:xlink="http://www.w3.org/1999/xlink">

<Order id="00301" xlink:href="http://www.parts-depot.com/order/00301 "/>

<Order id="00302" xlink:href="http://www.parts-depot.com/order/00302 "/>

</p:Parts>

(18)

Exemplo:  listagem com  múltiplos filtros

§

Lista de  ordens de  compra dum utilizador num  dado  mês

GET  http://www.parts-­depot.com/nuno/order?month=Jan-­2012

GET  http://www.parts-­depot.com/nuno/order/Jan-­2012

<?xml version="1.0"?>

<p:Orders xmlns:p="http://www.parts-depot.com"

xmlns:xlink=

http://www.w3.org/1999/xlink

>

<Order id="00302" xlink:href="http://www.parts-depot.com/order/00302 "/>

</p:Parts>

(19)

Exemplo:  listagem com  paginação

§

Tornar parte  uma lista de  peças disponível como um  recurso

GET  http://www.parts-­depot.com/parts?query=hammer&start=1&end=10

GET  http://www.parts-­depot.com/parts/hammer&start=1&end=10

<?xml version="1.0"?>

<p:Parts xmlns:p="http://www.parts-depot.com"

xmlns:xlink="http://www.w3.org/1999/xlink">

<Part id="00345" xlink:href="http://www.parts-depot.com/parts/00345"/>

</p:Parts>

(20)

Exemplo:  contagem

§

Contar número de  elementos duma lista de  peças

GET  http://www.parts-­depot.com/parts/count

<?xml version="1.0"?>

<p:PartsCount xmlns:p="http://www.parts-depot.com"

xmlns:xlink="http://www.w3.org/1999/xlink">

3

</p:PartsCount>

(21)

REST  vs.  RPCs/Web  Services

§

Nos sistemas de RPCs/Web  Services  a  ênfase é nas operações que

podem ser  invocadas

§

Nos sistemas REST, a ênfase é nos recusos,  na sua representação e em

(22)

REST:  protocolos

§

Baseado em protocolos standard

§

Comunicação

§

HTTP  (tipicamente)

§

Identifcação de  recursos

§

URL/URI

§

Representação dos  recursos

(23)

XML  vs.  Json

<Person  firstName='John'  

lastName='Smith'  age='25'>

<Address  streetAddress='21  2nd  

Street'  city='New  York'  state='NY'  

postalCode='10021'  />

<PhoneNumbers home='212  555-­

1234'  fax='646  555-­4567'  />

</Person>

{    "Person”:    {

"firstName":  "John",

"lastName":  "Smith",

"age":  25,

"Address”:    {

"streetAddress":"21  2

nd

Street",

"city":"New York",

"state":"NY",

"postalCode":"10021"

},

"PhoneNumbers”:  {

"home":"212  555-­1234",

"fax":"646  555-­4567"

(24)

REST:  programação cliente

§

Estilo bricolage

§

Biblioteca invocação métodos HTTP

§

Java:  URL

§

JavaScript:  XMLHttpRequest

§

Ruby:  Net:HTTP

§

Bibliotecas para codificação de  dados

§

Java:  XML  -­>  JAXP;;  JSON  -­>  google it  J

§

JavaScript:  XML  -­>  XMLHttpRequest;;   JSON  -­>  objecto JavaScript

§

PHP:  XML,  JSON  installed  in  PHP  >  5.2

§

Estilo framework

§

Sistemas em que integram mecanismos anteriores de  forma  coerente

§

Java:   JAX-­RS;;  PHP:  EasyRest,  Recess,   …;;  JavaScript:   jQuery

(25)

REST:  cliente Javascript

var httpRequest = new XMLHttpRequest();

httpRequest.onreadystatechange = function()

{

dosomething(httpRequest); };

httpRequest.open("GET", “http://.../parts”, true);

httpRequest.send(null);

(26)

REST:  cliente Ruby  on  Rails

Net::HTTP.get('example.com', '/index.html') # => String

uri = URI('http://example.com/some_path?query=string')

Net::HTTP.start(uri.host, uri.port) do |http|

request = Net::HTTP::Get.new uri.request_uri

response = http.request request # Net::HTTPResponse

object

(27)

REST:  programação servidor

§

Estilo bricolage

§

Cliente +

§

Biblioteca servidor/Application  server

§

Estilo framework

§

Sistemas em que integram mecanismos anteriores de  forma  coerente

§

Java:   Jersey,   Jboss,  Restlet,  etc.

§

PHP:  Recess,  Zend Rest,  etc.

§

Ruby  on  Rails:  rails  routing

(28)

REST:  servidor Ruby  on  Rails

resources :parts

HTTP Verb Path

action

used  for

GET

/parts

index

display  a  list  of  all part

GET

/parts/new

new

return  an HTML form  for  creating   a  

new part

POST

/parts

create

create   a  new part

GET

/parts/:id

show

display  a  specific part

GET

/parts/:id/edit

edit

return  an HTML form  for  editing  a

part

PUT

/parts/:id

update

update  a  specific part

(29)

REST: programação em Java

§

Definido em JAX-­RS  (JSR  311)

§

Suporte linguístico baseado na utilização de  anotações

§

Permite definir que um  dado  URL/operação HTTP  leva à execução

dum dado  método

§

Permite definir o modo de  codificação da resposta/pedido

§

XML  – usando mecanismo standard   de  codificação de  cobjectos java  em

XML  fornecido pelo JAXB  

(30)

REST:  suporte  Java  (exemplo)

@Path("/customerservice/")

@ProduceMime("application/xml")

public  class CustomerService {

@GET

public  Customers  getCustomers()  {      ...      }

@GET

@Path("/customers/{id}")

@Produces("application/json")

public  Customer  getCustomer(@PathParam("id")   String  id)  {...      }

@PUT

@Path("/customers/{id}")

@Consumes("application/xml")

public  Response  updateCustomer(@PathParam("id") long  id,  Customer  customer)  

{      ...      }

(31)

REST:  suporte  Java  (exemplo)

@POST

@Path("/customers")

public  Response  addCustomer(Customer customer)  {      ...      }

@DELETE

@Path("/customers/{id}/")

public  Response  deleteCustomer(@PathParam("id")   String  id)  {      ...      }

@Path("/orders/{orderId}/")

public  Order  getOrder(@PathParam("orderId")   String  orderId)  {      ...      }

}

(32)

Conclusões

§

Grande  popularidade

§

Muitos serviços web  disponibilizados segundo este modelo

§

Grandes vantagens:   simplicidade e desempenho

§

Serviços disponibilizados num  modelo REST  nem sempre aderem

(33)

Ligações

§

REST

§

Fielding’s  TOIT  paper:  

http://www.ics.uci.edu/~taylor/documents/2002-­REST-­TOIT.pdf

§

Wikipedia:  

http://en.wikipedia.org/wiki/Representational_State_Transfer

§

Exemplo Delicious:  http://www.peej.co.uk/articles/restfully-­delicious.html

§

Ruby  on  Rails

§

Net:Http:  

http://ruby-­doc.org/stdlib-­

1.9.3/libdoc/net/http/rdoc/Net/HTTP.html

§

Routing

http://guides.rubyonrails.org/routing.html

§

Javascript

§

XMLHttpRequest:   http://www.w3.org/TR/XMLHttpRequest/

§

http://api.jquery.com/jQuery.ajax/

(34)

Ligações

§

Java

§

Docs

§

JAX-­RS  spec:  

http://jsr311.java.net/

§

Restful  Java  with  JAX-­RS:

§

http://books.google.com/books?id=_jQtCL5_vAcC&lpg=PP1&ots=cJdr7eTV1X&dq=jax-­rs&pg=PP1#v=onepage&q=&f=false

§

Frameworks

§

Jersey:  

http://jersey.java.net/

§

Jboss:  

http://www.jboss.org/resteasy

(35)

Ligações (cont.)

§

PHP

§

Docs

§

http://php.net/manual/en/book.http.php

§

http://php.net/manual/en/book.json.php

§

Framework

§

Recess:  

http://www.recessframework.org/

§

EasyRest:  

http://code.google.com/p/easyrest/

§

Zend Rest:  

http://framework.zend.com/manual/en/zend.rest.html

§

JSON

§

http://www.json.org/

§

http://www.json.org/java/

§

http://php.net/manual/en/book.json.php

§

http://flori.github.com/json/

Referências

Documentos relacionados

É preciso afirmar que o núcleo fundamental das religiões não está em provar a existência de Deus, em refutar aqueles que não creem, em procurar identificar uma verdade a

A partir do cruzamento do mapa de distâncias da rede de drenagem e nascentes com o mapa de vinhedos, foi realizado o cruzamento das informações em SIG, o que mostrou as áreas

5.2 Importante, então, salientar que a Egrégia Comissão Disciplinar, por maioria, considerou pela aplicação de penalidade disciplinar em desfavor do supramencionado Chefe

Art. Considera-se condição a cláusula que, derivando exclusivamente da vontade das partes, subordina o efeito do negócio jurídico a evento futuro e incerto. São lícitas,

Os testes de desequilíbrio de resistência DC dentro de um par e de desequilíbrio de resistência DC entre pares se tornarão uma preocupação ainda maior à medida que mais

Através do experimento in vivo, verificou-se que o pó nebulizado de nanocápsulas (Neb-NC) é efetivo na proteção da mucosa gastrintestinal frente à indometacina, enquanto que os

Considera-se que a interdisciplinaridade contribui para uma visão mais ampla do fenômeno a ser pesquisado. Esse diálogo entre diferentes áreas do conhecimento sobre

Exposição no Átrio do Auditório Municipal de Mesão Frio Exposição dos trabalhos feitos nas Oficinas de Origamis para alunos, promovida no dia 13 de Abril de 2011 na