62
De Web Services RESTFul a aplicações Mashups Wagner Roberto dos Santos Arquiteto Software/Scrum Master

De Web Services RESTful a Aplicações Mashup

Embed Size (px)

DESCRIPTION

Palestra "De Web Services RESTful a Aplicações Mashup" apresentada no Just Java 2009 por Wagner Roberto dos Santos

Citation preview

Page 1: De Web Services RESTful a Aplicações Mashup

De Web Services RESTFul aaplicações Mashups

Wagner Roberto dos SantosArquiteto Software/Scrum Master

Page 2: De Web Services RESTful a Aplicações Mashup

Apresentação• Arquiteto Java EE / Scrum Master• Lead Editor da Queue Arquitetura do Portal InfoQ

Brasil (http://infoq.com/br).• Participação nos projetos de tradução e teste do

NetBeans.• Palestrante de eventos como Just Java, Sun Tech

Days, Campus Party.• Premiações em competições de tecnologia .• Autor de artigos para as revistas Mundo Java e

Java Magazine.• Participação em diversos projetos Open Source.• Certificações: SCJA, SCJP, SCSNI, SCJWSD,

SCBCD, SCEA (I), CSM.• Mantém o blog http://netfeijao.blogspot.com/

Page 3: De Web Services RESTful a Aplicações Mashup

Agenda

O que é REST?JAX-RS – Java API for RESTful Web

ServicesConsumindo e testando serviços RESTO que são Mashups?Aprendendo a partir de ExemplosFerramentasCriando suas próprias APIsConclusão

Page 4: De Web Services RESTful a Aplicações Mashup

Afinal, o que é REST?

REST = REpresentational State Transfer

REST ≠ TecnologiaREST ≠ PadrãoREST = Estilo de Arquitetura

Estilo de arquitetura de software para sistemas hipermídia distribuídos...

Page 5: De Web Services RESTful a Aplicações Mashup

Afinal, o que é REST?

Como por exemplo ....

... a própria WEB.

Page 6: De Web Services RESTful a Aplicações Mashup

O Pai da Criança

Autor da especificação HTTP.

Em 2000, apresentou como tese para seu doutorado uma nova forma de integrar sistemas multimídia, chamada REST.’

Doutor Roy Fielding.

Page 7: De Web Services RESTful a Aplicações Mashup

Afinal, O que é REST?

http://netfeijao.blogspot.com

Response (página)

netfeijao.blogspot.com

Servidor Web

Cliente

HTTP RequestHost: www.mundojava.com.brUser-Agent: Mozilla/5.0 Accept: text/html,application/xhtml+xml,application/xmlAccept-Language: pt-br,ptAccept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Proxy-Connection: keep-aliveReferer: http://netfeijao.blogpost.com/

HTTP RESPONSEContent-Type: text/html; charset=UTF-8Expires: Mon, 14 Sep 2009 15:09:37 GMTDate: Mon, 14 Sep 2009 15:09:37 GMTCache-Control: public, max-age=0, proxy-revalidate, must-revalidateLast-Modified: Fri, 11 Sep 2009 15:51:25 GMTX-Content-Type-Options: nosniffServer: GFE/2.0Content-Length: 39062Content-Encoding: gzipAge: 0200 OK

Page 8: De Web Services RESTful a Aplicações Mashup

Afinal, O que é REST?

Clientes Web Servidores

Page 9: De Web Services RESTful a Aplicações Mashup

Recursos Web

Afinal, O que é REST?

Page 10: De Web Services RESTful a Aplicações Mashup

Media Types

atom+xml xhtml+xmlmpeg4-genericjpeghtml3gpp-ttform-data

Afinal, O que é REST?

Page 11: De Web Services RESTful a Aplicações Mashup

Recursos e Representações

URI – Uniform Resource IdentifierIdentificador único de um recurso físico ou abstrato.

Uma URI pode ser classificada como:

Afinal, O que é REST?

URN: Uniform Resource Name

URL: Uniform Resource Locator

Page 13: De Web Services RESTful a Aplicações Mashup

O recurso é exposto pela URI

http://www.justjava.com.br/palestrantes/wrsantoshttp://www.justjava.com.br/palestras/54811

Definição de como URI mapeia o recurso

Afinal, O que é REST?

Nome da Coleção de RecursosChave Primária

Page 14: De Web Services RESTful a Aplicações Mashup

Afinal, O que é REST?Representaçõesem diversos sabores..

XML JSON (X)HTML

Page 15: De Web Services RESTful a Aplicações Mashup

Afinal, O que é REST?RepresentaçõesNegociação de conteúdo.

XML JSON (X)HTML

http://justjava.com.br/palestrantes/wrsantos

HTTP RequestHost: justjava.com.brUser-Agent: Mozilla/5.0 Accept: application/json, application/xmlAccept-Language: pt-br,ptAccept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Proxy-Connection: keep-aliveReferer: http://justjava.com.br/

justjava.com.br

Servidor Web

Page 16: De Web Services RESTful a Aplicações Mashup

Métodos HTTP

Afinal, O que é REST?

GET Solicita que o servidor envie um recurso.

PUT O inverso do GET. Realiza operações de escrita no servidor.

DELETE Solicita a exclusão de um recurso no servidor.

POST Foi projetado para envio de dados de input, por exemplo, os dados de um formulário.

HEAD Mesmo comportamento que o método GET, porém o servidor retorna apenas o cabeçalho da resposta.

Page 17: De Web Services RESTful a Aplicações Mashup

Então REST é..

REpresentational State Transfer

Recursos são identificados por URIs

Métodos (verbos) HTTP para manipular os Recursos

Representação é como você vê o Estado do Recurso.

Afinal, O que é REST?

Page 18: De Web Services RESTful a Aplicações Mashup

Exemplo:

Afinal, O que é REST?

GET http://www.justjava.com.br/palestrantes/wrsantos

justjava.com.brRequestHost: justjava.com.brAccept: application/xml

Método (Verbo) RecursoRESPONSEHTTP/ 1.1 200 OKContent-Type: application/xml; charset=UTF-8Date: Mon, 14 Sep 2009 15:09:37 GMTServer: GFE/2.0

<?xml version="1.0" encoding="UTF-8"?> <palestrante num_cpf="123456789"> <nome>Wagner</nome> <idade>29</idade> <statusCivil>Casado</statusCivil> </ palestrante >

Estado deTransferência

Representação

Page 19: De Web Services RESTful a Aplicações Mashup

Códigos de Status

Afinal, O que é REST?

Range Descrição100-101 Informacional. 200-206 Sucesso.

300-305 Redirecionamento.

400-415 Erro do Cliente.

500-505 Erro do Servidor.

Page 20: De Web Services RESTful a Aplicações Mashup

JAX –RS - Java API for RESTful Web ServicesJSR-311

Page 21: De Web Services RESTful a Aplicações Mashup

JAX - RS

Objetivos

Definida pela JSR-311.

Torna fácil construir código Java como um serviço REST

Uma alternativa aos Web Services SOAP com JAX-WS

Integração com WebBeans, EJB e JPA.

Page 22: De Web Services RESTful a Aplicações Mashup

JAX - RS

Implementações conhecidas

Jersey

Page 23: De Web Services RESTful a Aplicações Mashup

JAX - RS

Trabalhando com RecursosAnotação @Path

@Path("/palestrantes/{nome}")public class PalestranteREST{...}

“/palestrantes/” é o prefixo da URI que a classe irá atender e {nome} é valor do parâmetro nome.

Page 24: De Web Services RESTful a Aplicações Mashup

JAX - RSAcessando os Recursos

@GET@POST@PUT@DELETE@HEAD@HttpMethod(“MétodoCustomizado”)

e devem ser atribuídas a métodos públicos

Page 25: De Web Services RESTful a Aplicações Mashup

JAX - RS

Definindo as RepresentaçõesPara tratamento de Request @Consumes

Exemplo:@PUT@Consumes("application/xml","application/json")@Path("/autores/")public Response putPessoa(PessoaBinding pessoa) { ... }.

Page 26: De Web Services RESTful a Aplicações Mashup

JAX - RS

Definindo as RepresentaçõesPara tratamento de Response @Produces

Exemplo:@GET@Produces({"application/xml", "application/json"})public PessoaConverter getPessoa(@QueryParam("CPF")

String numCPF) { // Retorna representação em XML ou JSON}

Page 27: De Web Services RESTful a Aplicações Mashup

JAX - RSExtraindo valores da URI na Requisição@PathParam Extrai um parâmetro informado no

caminho da URI.@QueryParam Extrai um parâmetro informado no

caminho da URI.@FormParam Extrai um parâmetro de formulário no

body da requisição.@MatrixParam Extrai os valores (chave/valor) da matriz

de parâmetros da URI.@CookieParam Extrai os valores de cookies vinculados a

sessão. @HeaderParam Extrai dados do cabeçalho de uma

requisição HTTP.

Page 28: De Web Services RESTful a Aplicações Mashup

JAX - RSExtraindo valores da URI na RequisiçãoExemplo:@Path("/Palestrantes/")public class EventoResource { @GET @Produces("application/xml") @Path("/autores/{nomeAutor}/") public PalestranteBinding getPessoa(@PathParam(“login") String loginName, @QueryParam(“tipo") int macroTema, @HeaderParam("CPF") String CPF, @MatrixParam(“ano") String anoEvento) { return new PalestranteBinding(loginName, macroTema, CPF, anoEvento); }}

Page 29: De Web Services RESTful a Aplicações Mashup

JAX - RSExtraindo valores da URI na Requisição

Page 30: De Web Services RESTful a Aplicações Mashup

JAX - RSInterface uniforme para Response@PUT@Consumes("application/xml")@Path("/Palestrantes/update/")public Response putPalestrante(PalestranteBinding pessoa){ String retorno = "<html><body><h1>Bem vindo "+pessoa. getNome()+"</h1></body></html>"; URI uri = // Pega a URI; return Response.created(uri). status(Response.Status.ACCEPTED). entity(retorno). type(MediaType.TEXT_HTML). build();}

Page 31: De Web Services RESTful a Aplicações Mashup

JAX - RS

Tratando Exceções

A especificação define a exceção WebApplicationException que extende Runtime.

• Pode ser lançada por um método de recurso.• Permite abortar a execução do serviço.

Page 32: De Web Services RESTful a Aplicações Mashup

JAX - RS

Tratando Exceções

@GET @Produces("application/xml") @Path("/autores/{palestrante}/{idade: [0-9]+}/") public PalestranteBinding getPalestrante( @PathParam(“palestrante") String name, @PathParam("idade") int idade, @HeaderParam("CPF") String numCPF) { if (idade <= 0 || idade > 120){ throw new WebApplicationException(Response.status(412). entity("Idade inválida!"). build()); } return new PalestranteBinding(name, idade, numCPF); }

Page 33: De Web Services RESTful a Aplicações Mashup

JAX - RS

Consumindo e Testando Serviços RESTful

Page 34: De Web Services RESTful a Aplicações Mashup

Consumindo e Testando Serviços RESTRESTClient

Page 35: De Web Services RESTful a Aplicações Mashup

Consumindo e Testando Serviços RESTcURL

Page 36: De Web Services RESTful a Aplicações Mashup

Consumindo e Testando Serviços RESTNetBeans

Page 37: De Web Services RESTful a Aplicações Mashup

Consumindo e Testando Serviços REST

Consumindo Serviços RESTfulJAXB

Page 38: De Web Services RESTful a Aplicações Mashup

Consumindo e Testando Serviços RESTJAXB - Exemplo

@XmlRootElement(name=“palestrante")@XmlType(name="", propOrder={"nome","idade","statusCivil"})public class PalestranteBinding {/* Construtores, Atributos e Setters omitidos */@XmlElement public String getNome() { return nome; } @XmlElement public int getIdade() { return idade; } @XmlAttribute(name="num_cpf") public String getCpf() { return cpf; } ..}

Page 39: De Web Services RESTful a Aplicações Mashup

Consumindo e Testando Serviços RESTJAXB - Exemplo

<?xml version="1.0" encoding="UTF-8"?> <palestrante num_cpf="123456789"> <nome>Wagner</nome> <idade>29</idade> <statusCivil>Casado</statusCivil> </ palestrante >@Path("/Palestrantes/")

public class EventoResource { @GET @Produces("application/xml") @Path("/autores/{nomeAutor}/") public PalestranteBinding getPessoa(@PathParam(“nome") String nome, @PathParam(“idade") int idade, @HeaderParam("CPF") String CPF, @PathParam (“estadoCivil") String civil) { return new PalestranteBinding(nome, idade, CPF, civil); }}

Classe JAXB Gera

Page 40: De Web Services RESTful a Aplicações Mashup

Consumindo e Testando Serviços REST

Bibliotecas JavaScript.

Page 41: De Web Services RESTful a Aplicações Mashup

Consumindo e Testando Serviços REST

Bibliotecas JavaScript - jQuery

$.getJSON("http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos& photoset_id=72157614488723406

&format=json&jsoncallback=?",function(data){ $.each(data.photoset.photo, function(i,item){ if (item.title == foto){ $

("<img/>").attr("src","http://farm"+item.farm+ ".static.flickr.com/"+item.server+"/"+item.id+"_"+ item.secret+"_m.jpg").appendTo("#foto"); } });});

Page 42: De Web Services RESTful a Aplicações Mashup

Consumindo e Testando Serviços REST

Bibliotecas JavaScript - jQuery

var myUrl = "http://justjava.com.br/palestrantes/wrsantos“;

$.ajax({ type: ‘DELETE’, url: myUrl, success: function(msg){ $("#alert").html(msg); }});

Page 43: De Web Services RESTful a Aplicações Mashup

Enfim, Mashups

Mashups

Page 44: De Web Services RESTful a Aplicações Mashup

Mashups

Definições:

Aplicação Web composta de Serviços existentes e dados.

Utiliza APIs abertas de outras aplicações Web.

Page 45: De Web Services RESTful a Aplicações Mashup

Mashups

Propriedades:

Pouco esforço de programação. Diversas ferramentas (Maioria baseada em

JavaScript e (X)HTML)

Aplicações Web Interativas

Page 46: De Web Services RESTful a Aplicações Mashup

Mashups

Propriedades: Agrega conteúdo de mais de uma fonte.

Page 47: De Web Services RESTful a Aplicações Mashup

Mashups

Formato de Dados

XML Continua sendo importante. Não é fácil fazer parsing no Browser.

RSS/ATOM Mais do que notícias e Blogs Troca de Dados

JSON Formato Textual e Estrutura Simples Mais fácil que XML Uma linha: var oi = eval(codigo_JSON); Útil para APIs públicas

Page 48: De Web Services RESTful a Aplicações Mashup

Mashups

Overview em Mashups Client-Side

Tecnologia Centrada no Cliente

Prós Facilidades em adicionar funcionalidades exportada Não precisa de um componente server-side Não ocorre latência de acesso a rede duas vezes Não precisa de um plugin customizado para o Navegador

Contras Devo confiar no fornecedor do serviço API pode mudar.

Page 49: De Web Services RESTful a Aplicações Mashup

Mashups

Componentes de uma biblioteca Client-Side

Criação de um serviço server-side.Criação de um arquivo JScript para o client-sidePosso criar um arquivo CSS para o cliente-sidePosso documentar a APIPosso criar exemplos de demonstração

Page 50: De Web Services RESTful a Aplicações Mashup

Mashups

Segurança

TokenBaseada em Sessão / HashBaseada em URL – chave de APIContent Type utilizando Autenticação

Page 51: De Web Services RESTful a Aplicações Mashup

MashupsArquitetura de um Mashup

Page 52: De Web Services RESTful a Aplicações Mashup

Mashups

Veja: http://netfeijao.blogspot.com/2009/05/web-services-ws-vs-rest.html

Por que não utilizar

Web Services SOAP ou WS* ?

Page 53: De Web Services RESTful a Aplicações Mashup

MashupsSOAP e WS-*

Pontos Positivos Pontos Negativos•Diversas ferramentas de desenvolvimento.•Tipagem forte e um vocabulário bem definido.•Quando utilizado sobre HTTP, dificilmente é bloqueado por proxies e firewalls.•Permite o uso de diferentes tipos de protocolos.•Plataforma independente.•Linguagem independente

•Diversos padrões.•Complexidade dos padrões.•Performance.•Mensagens podem ficar muito extensas, por serem codificadas com XML

Page 54: De Web Services RESTful a Aplicações Mashup

MashupsREST

Pontos Positivos Pontos Negativos•Simplicidade, interface imutável, agnóstica.•Interação assíncrona, não possui estado.•Facilidade de adoção, pois não requer uma grande infra-estrutura, menos um middleware WS-* ou camada adicional.•Utiliza a web como meio de transporte, sendo assim uma carga baixa na rede.•Utilizada por grande parte das aplicações Web 2.0. (Google, Flickr, Amazon, etc..). Portanto, ótimo para mashups.

•Curva de aprendizagem baixa.

•Faltam padrões.•Falta de segurança.•Não é indicado para trafegar grandes volumes de parâmetros via URI.•Em muitas empresas apenas os métodos GET e POST do HTTP são liberados em proxies e firewalls. •Não há mecanismos de transação.•Não existe um padrão como UDDI.

Page 55: De Web Services RESTful a Aplicações Mashup

Ferramentas

Page 56: De Web Services RESTful a Aplicações Mashup

Mashups - FerramentasYahoo Pipes!

Page 57: De Web Services RESTful a Aplicações Mashup

Mashups - Ferramentas

Page 58: De Web Services RESTful a Aplicações Mashup

Mashups – Ferramentas

Page 59: De Web Services RESTful a Aplicações Mashup

Mashups - Ferramentas

Page 60: De Web Services RESTful a Aplicações Mashup

Mashups - Ferramentas

Page 61: De Web Services RESTful a Aplicações Mashup

Mashups

Page 62: De Web Services RESTful a Aplicações Mashup

De Web Services REST aos Mashups

OBRIGADOContatosEmail: [email protected]: http://netfeijao.blogspot.comTwitter: http://twitter.com/wrsantos