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



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

SUMÁRIO REST. REST + OAuth. Cliente em Java Processamento de respostas JSON

WOW Mobile Rui Miguel Miranda Ramos

Desempenho: aspectos a considerar

Criando e consumindo Web service REST com PHP e JSON. Palestrante: Weiberlan Garcia

RestFull WebServices. Rafael Nunes Arquiteto de Software / Instrutor Globalcode. Globalcode Open4Education

Departamento de Informática

REST. Caio Nakashima

Service Oriented Architecture SOA

REST Um Estilo de Arquitetura de Sistemas Distribuídos

Web Services REST. Sistemas Distribuídos. Mauro Lopes Carvalho Silva. Professor EBTT DAI Departamento de Informática Campus Monte Castelo

Integração de sistemas utilizando Web Services do tipo REST

Arquiteturas SOA, WOA, e REST

Conceitos de Ajax Exemplos de uso do Ajax no braço, muitos exemplos, muito código (HTML, CSS, JavaScript, PHP, XML, JSON)

Ajax não é dependente dos servidores Web, e como tal poderá ser usado com PHP, JSP, ASP e ASP.NET.

Práticas de Desenvolvimento de Software

Service Oriented Architecture SOA

COMPARANDO APLICAÇÃO WEB SERVICE REST E SOAP

EA975 - Laboratório de Engenharia de Software

SISTEMAS DISTRIBUÍDOS

Serviços: API REST. URL - Recurso

Departamento de Informática

Ricardo R. Lecheta. Novatec

Ajax Asynchronous JavaScript and Xml

Desenvolvimento de Aplicações Distribuídas

REST. Representational State Transfer. É um estilo arquitetural usado por muitas aplicações Web para estender as suas funcionalidades.

AJaX Asy s nchronous s J avasc S ript p t a nd d XML

UFG - Instituto de Informática

INTERNET. TCP/IP protocolo de comunicação sobre o qual se baseia a Internet. (conjunto de regras para a comunicação entre computadores)

Finalizando o Pedido (Tarefa G) Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br)

SISTEMAS DISTRIBUÍDOS

BEM-VINDOS AO CURSO DE ORIENTADO A OBJETOS

Web services. Um web service é qualquer software que está disponível através da Internet através de uma interface XML.

Web das Coisas WoT. Software: APIs para IoT. Prof. João Bosco Teixeira Junior

Serviços Web: Arquitetura

Universidade Federal de Campina Grande Departamento de Sistemas e Computação Ciência da Computação. alyssonfm@lcc.ufcg.edu.br

6127. Redes comunicação de dados. 2014/2015. Acesso à Internet.

Web Services e SOAP. Alexandre Zua CaldeiraTecnologias de Middleware 2006/ Faculdade de Ciências da Universidade de Lisboa

Sistemas Distribuídos na Web. Pedro Ferreira DI - FCUL

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

Ajax Asynchronous JavaScript and Xml

Desenvolvimento Web. Introdução Geral. Prof. Vicente Paulo de Camargo

APLICAÇÕES E SERVIÇOS WEB

XACML. extensible Access Control Markup Language

STD29006 Sistemas Distribuídos

Programação para Internet I. 2. O protocolo HTTP. Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt

Engenharia de Software Aplicações de Internet

O protocolo HTTP. Você aprenderá: O que é e como funciona o protocolo HTTP. Quais são as partes de um pedido HTTP.

trigger insert, delete, update

Programação para Internet Avançada. 4. Web Services. Nuno Miguel Gil Fonseca

Versão 0.1. Manual FoRc. Última Atualização: Maio/2007. Daniel Schmitz

Curso de Java. Geração de Páginas WEB. TodososdireitosreservadosKlais

Rede de Computadores (REC)

EA975 - Laboratório de Engenharia de Software. Objetivo do curso. Turmas K/L Aula 1

Aulas Práticas. Implementação de um Proxy HTTP. O que é um proxy?

Parte I. Demoiselle Mail

WWW - World Wide Web

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Universidade da Beira Interior

UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática

Programação Web Aula 10 - Testes, Javascript, Ajax

Sumário. Parte I Introdução Introdução O Rails é ágil Explorando o conteúdo Agradecimentos... 19

PROGRAMAÇÃO PARA INTERNET RICA RICH INTERNET APPLICATIONS

Luiz Arão Araújo Carvalho Bacharel em Ciência da Computação Desenvolvedor RedeSat-TO

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP

UNIVERSIDADE. Sistemas Distribuídos

SISTEMAS DISTRIBUÍDOS

Linguagens, Web Services e WEB 2.0

WSDL e UDDI. Pedro Miguel Martins Nunes WSDL. WSDL Exemplo prático Resumo UDDI. Serviço UDDI Estruturas de dados UDDI e WSDL API Resumo

Programação Na Web. Sessão II. Índice. Visão geral da API Sessão. Obter dados sobre uma sessão. Extrair informação sobre uma Sessão

EA975 - Laboratório de Engenharia de Software

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

>>> RESTful API >>> Com Node.js e Restify. Name: Anderson Pimentel Date: 19 de Março de

Desenvolvimento Web II

Programação para a Internet II PHP AJAX. Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Programação para a Web - I. José Humberto da Silva Soares

Aplicativos para Internet Aula 01

SISTEMAS DISTRIBUÍDOS

Sistemas Empresariais Integrados

Evolução guiada por APIs. com REST para modernizar seu legado

Escola Superior de Tecnologia de Setúbal. Projecto Final

Escrito por Sáb, 15 de Outubro de :19 - Última atualização Seg, 26 de Março de :32

Gestão e Tratamento de Informação 1º semestre

Uma Arquitectura Web para Serviços Web

Manual técnico. v /10

Manual de Administração Intranet BNI

com Repositórios Abertos

MÓDULO MULTIMÉDIA. Text PROFESSOR: RICARDO RODRIGUES. MAIL: URL:

Android e Bancos de Dados

Aula 4. Objetivos. Conteúdo dinâmico na internet.

Transcrição:

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

Notas Imagens do livro: G. Alonso et. Al. Web Services: Concepts, Architectures and Applications, Springer, 2004. Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 2

Sumário REST: modelo REST: protocolos REST: programação Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 3

Contexto Sistema de informação pervasivos Necessidade de fornecer serviços Necessidade de aceder a serviços Criar serviços mais complexos Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 4

Web services: dentro de uma organização Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 5

Web services: entre organizações Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 6

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

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

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 como permitindo ou não caching. Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 9

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

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

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

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

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

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

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

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

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

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 como estes são afectados por um conjunto de métodos standard Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 19

Outro exemplo Sugestões? Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 20

REST: protocolos Baseado em protocolos standard Comunicação HTTP (tipicamente) Identifcação de recursos URL/URI Representação dos recursos XML, JSon Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 21

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> (Example from wikipedia) { "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" } } } Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 22

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

REST: cliente Javascript var httprequest = new XMLHttpRequest();! httprequest.onreadystatechange = function()!{ dosomething(httprequest); };! httprequest.open("get", http://.../parts, true);! httprequest.send(null);!!! Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 24

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

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

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" DELETE" /parts/:id" destroy" delete a specific part" Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 27

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 JSON mecanismo leve de codificação de tipos (RFC 4627) Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 28

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

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

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 http://api.flickr.com/services/rest/?method=flickr.photos.search&appid=sdfjkshf Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 31

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

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 Restlet: http://www.restlet.org/ Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 33

Ligações (cont.) PHP Docs JSON 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 http://www.json.org/ http://www.json.org/java/ http://php.net/manual/en/book.json.php http://flori.github.com/json/ Material de suporte às aulas de Proj. Integrador (Nuno Preguiça) Copyright DI FCT/ UNL / 34