Upload
wagner-roberto-dos-santos
View
3.236
Download
4
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
De Web Services RESTFul aaplicações Mashups
Wagner Roberto dos SantosArquiteto Software/Scrum Master
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/
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
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...
Afinal, o que é REST?
Como por exemplo ....
... a própria WEB.
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.
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
Afinal, O que é REST?
Clientes Web Servidores
Recursos Web
Afinal, O que é REST?
Media Types
atom+xml xhtml+xmlmpeg4-genericjpeghtml3gpp-ttform-data
Afinal, O que é REST?
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
URI – Uniform Resource Identifier
Exemplosftp://ftp.is.co.za/rfc/rfc1808.txthttp://www.ietf.org/rfc/rfc2396.txtldap://[2001:db8::7]/c=GB?objectClass?onemailto:[email protected]:comp.infosystems.www.servers.unix tel:+1-816-555-1212 telnet://192.0.2.16:80/urn:oasis:names:specification:docbook:dtd:xml:4.1.2
Afinal, O que é REST?
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
Afinal, O que é REST?Representaçõesem diversos sabores..
XML JSON (X)HTML
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
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.
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?
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
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.
JAX –RS - Java API for RESTful Web ServicesJSR-311
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.
JAX - RS
Implementações conhecidas
Jersey
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.
JAX - RSAcessando os Recursos
@GET@POST@PUT@DELETE@HEAD@HttpMethod(“MétodoCustomizado”)
e devem ser atribuídas a métodos públicos
JAX - RS
Definindo as RepresentaçõesPara tratamento de Request @Consumes
Exemplo:@PUT@Consumes("application/xml","application/json")@Path("/autores/")public Response putPessoa(PessoaBinding pessoa) { ... }.
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}
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.
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); }}
JAX - RSExtraindo valores da URI na Requisição
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();}
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.
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); }
JAX - RS
Consumindo e Testando Serviços RESTful
Consumindo e Testando Serviços RESTRESTClient
Consumindo e Testando Serviços RESTcURL
Consumindo e Testando Serviços RESTNetBeans
Consumindo e Testando Serviços REST
Consumindo Serviços RESTfulJAXB
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; } ..}
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
Consumindo e Testando Serviços REST
Bibliotecas JavaScript.
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"); } });});
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); }});
Enfim, Mashups
Mashups
Mashups
Definições:
Aplicação Web composta de Serviços existentes e dados.
Utiliza APIs abertas de outras aplicações Web.
Mashups
Propriedades:
Pouco esforço de programação. Diversas ferramentas (Maioria baseada em
JavaScript e (X)HTML)
Aplicações Web Interativas
Mashups
Propriedades: Agrega conteúdo de mais de uma fonte.
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
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.
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
Mashups
Segurança
TokenBaseada em Sessão / HashBaseada em URL – chave de APIContent Type utilizando Autenticação
MashupsArquitetura de um 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* ?
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
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.
Ferramentas
Mashups - FerramentasYahoo Pipes!
Mashups - Ferramentas
Mashups – Ferramentas
Mashups - Ferramentas
Mashups - Ferramentas
Mashups
De Web Services REST aos Mashups
OBRIGADOContatosEmail: [email protected]: http://netfeijao.blogspot.comTwitter: http://twitter.com/wrsantos