• 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!
34
0
0

Texto

(1)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 1

Projecto Integrador

(2)

Notas

§  Imagens do livro:

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

(3)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 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)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 5

(6)
(7)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 7

REST: Representational State Transfer

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

§  Um recuso é 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)

§  Estilo arquitectural, não um sistema de desenvolvimento

§  Aproximação proposta por Roy Fielding na sua tese de doutroamento

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

(8)

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 – actualizar §  DELETE – remover

(9)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 9

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

(10)

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

(11)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 11

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>

(12)

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>

(13)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 13

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>

(14)

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>

(15)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 15

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>

(16)

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>

(17)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 17

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>

(18)

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>

(19)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 19

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

(20)

Outro exemplo

(21)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 21

REST: protocolos

§  Baseado em protocolos standard §  Comunicação

§  HTTP (tipicamente)

§  Identifcação de recursos

§  URL/URI

§  Representação dos recursos

(22)

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 2nd Street", "city":"New York", "state":"NY", "postalCode":"10021" }, "PhoneNumbers”: { "home":"212 555-1234", "fax":"646 555-4567" }

(23)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 23

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

(24)

REST: cliente Javascript

var httpRequest = new XMLHttpRequest();!

httpRequest.onreadystatechange = function() !{ dosomething(httpRequest); }; !

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

! !

(25)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 25

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!

(26)

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

(27)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 27

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"

(28)

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

(29)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 29

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) { ... }

(30)

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) { ... } }

(31)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 31

Conclusões

§  Tem ganho popularidade

§  Muitos serviços web disponibilizados segundo este modelo §  Grandes vantagens: simplicidade e desempenho

§  Serviços disponibilizados num modelo REST nem sempre aderem

completamente aos princípios REST

§  Difícil disponibilizar número elevado de métodos

(32)

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/

(33)

Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) – Copyright DI – FCT/ UNL / 33

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

(34)

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

Referências

Documentos relacionados

The direct method, besides being affected by the low quantity of 235 U in environmental samples, is also problematic due to the fact that the most intense transitions (185 and 143

A síndrome também pode se espalhar para todo o corpo, resultando em êmbolos sépticos, empiema, mediastinite, artrite séptica, edemas, trombose de veias (não só da jugular interna,

As pápulas e placas urticariformes e pruriginosas da gravidez, do inglês Pruritic Urticarial Papules and Plaques of Pregnancy (PUPPP), correspondem a erupções cutâneas

Dessa forma, nota-se um crescimento no uso de anorexígenos, também conhecidos como supressores do apetite, de forma abusiva e irracional, causando o

Os hemangiomas são os tumores vasculares benignos mais comuns da infância, apresentando- se geralmente como lesões cutâneas.. No entanto, podem surgir em outros sítios,

Além da Base de Bragança/ Central de Regulação Médica, possui 10 bases descentralizadas nos municípios de Atibaia, Joanópolis, Nazaré Paulista, Pedra Bela, Pinhalzinho,

Uma vez que a sexualidade está em constante transformação, considerando variações relacionadas com o tempo e o grupo social, além das variações individuais

Por fim, Trojani e colaboradores (2017), com base no fato de que os mecanismos biomoleculares da resposta da LMC aos inibidores de tirosina-quinase ainda não