De Web Services RESTful a Aplicações Mashup

3,455 views
3,382 views

Published on

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

Published in: Technology
1 Comment
4 Likes
Statistics
Notes
No Downloads
Views
Total views
3,455
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
97
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

De Web Services RESTful a Aplicações Mashup

  1. 1. De Web Services RESTFul a aplicações Mashups Wagner Roberto dos Santos Arquiteto Software/Scrum Master
  2. 2. 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/
  3. 3. Agenda O que é REST? JAX-RS – Java API for RESTful Web Services Consumindo e testando serviços REST O que são Mashups? Aprendendo a partir de Exemplos Ferramentas Criando suas próprias APIs Conclusão
  4. 4. Afinal, o que é REST? REST = REpresentational State Transfer REST ≠ Tecnologia REST ≠ Padrão REST = Estilo de Arquitetura Estilo de arquitetura de software para sistemas hipermídia distribuídos...
  5. 5. Afinal, o que é REST? Como por exemplo .... ... a própria WEB.
  6. 6. 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.
  7. 7. Afinal, O que é REST? HTTP Request Host: www.mundojava.com.br netfeijao.blogspot.com User-Agent: Mozilla/5.0 Accept: text/html,application/xhtml+xml,application/xml Accept-Language: pt-br,pt Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Proxy-Connection: keep-alive Referer: http://netfeijao.blogpost.com/ http://netfeijao.blogspot.com Servidor Web HTTP RESPONSE Content-Type: text/html; charset=UTF-8 Response (página) Expires: Mon, 14 Sep 2009 15:09:37 GMT Date: Mon, 14 Sep 2009 15:09:37 GMT Cache-Control: public, max-age=0, proxy- revalidate, must-revalidate Last-Modified: Fri, 11 Sep 2009 15:51:25 GM X-Content-Type-Options: nosniff Server: GFE/2.0 Cliente Content-Length: 39062 Content-Encoding: gzip Age: 0 200 OK
  8. 8. Afinal, O que é REST? Clientes Web Servidores
  9. 9. Afinal, O que é REST? Recursos Web
  10. 10. Afinal, O que é REST? Media Types atom+xml xhtml+xml mpeg4-generic jpeg html 3gpp-tt form-data
  11. 11. Afinal, O que é REST? Recursos e Representações URI – Uniform Resource Identifier Identificador único de um recurso físico ou abstrato. URN: Uniform Resource Name Uma URI pode ser classificada como: URL: Uniform Resource Locator
  12. 12. Afinal, O que é REST? URI – Uniform Resource Identifier Exemplos ftp://ftp.is.co.za/rfc/rfc1808.txt http://www.ietf.org/rfc/rfc2396.txt ldap://[2001:db8::7]/c=GB?objectClass?one mailto:John.Doe@example.com news: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
  13. 13. Afinal, O que é REST? O recurso é exposto pela URI http://www.justjava.com.br/palestrantes/wrsantos http://www.justjava.com.br/palestras/54811 Nome da Coleção de Recursos Chave Primária Definição de como URI mapeia o recurso
  14. 14. Afinal, O que é REST? Representações em diversos sabores..  XML  JSON  (X)HTML
  15. 15. Afinal, O que é REST? Representações Negociação de conteúdo. HTTP Request Host: justjava.com.br  XML User-Agent: Mozilla/5.0 Accept: application/json, application/xml  JSON Accept-Language: pt-br,pt Accept-Encoding: gzip,deflate justjava.com.br  (X)HTML Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Proxy-Connection: keep-alive Referer: http://justjava.com.br/ http://justjava.com.br/palestrantes/wrsantos Servidor Web
  16. 16. Afinal, O que é REST? Métodos HTTP 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.
  17. 17. Afinal, O que é REST? 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.
  18. 18. Afinal, O que é REST? Request justjava.com.br Exemplo: Host: justjava.com.br Accept: application/xml GET http://www.justjava.com.br/palestrantes/wrsantos Método (Verbo) Recurso RESPONSE HTTP/ 1.1 200 OK Content-Type: application/xml; charset=UTF-8 Date: Mon, 14 Sep 2009 15:09:37 GMT Server: GFE/2.0 Estado de <?xml version="1.0" encoding="UTF-8"?> Transferência <palestrante num_cpf="123456789"> <nome>Wagner</nome> <idade>29</idade> Representação <statusCivil>Casado</statusCivil> </ palestrante >
  19. 19. Afinal, O que é REST? Códigos de Status Range Descrição 100-101 Informacional. 200-206 Sucesso. 300-305 Redirecionamento. 400-415 Erro do Cliente. 500-505 Erro do Servidor.
  20. 20. JAX –RS - Java API for RESTful Web Services JSR-311
  21. 21. 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.
  22. 22. JAX - RS Implementações conhecidas Jersey
  23. 23. JAX - RS Trabalhando com Recursos Anotaçã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.
  24. 24. JAX - RS Acessando os Recursos @GET @POST @PUT @DELETE @HEAD @HttpMethod(“MétodoCustomizado”) e devem ser atribuídas a métodos públicos
  25. 25. JAX - RS Definindo as Representações Para tratamento de Request @Consumes Exemplo: @PUT @Consumes("application/xml","application/json") @Path("/autores/") public Response putPessoa(PessoaBinding pessoa) { ... } .
  26. 26. JAX - RS Definindo as Representações Para 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 }
  27. 27. JAX - RS Extraindo 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.
  28. 28. JAX - RS Extraindo valores da URI na Requisição Exemplo: @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); } }
  29. 29. JAX - RS Extraindo valores da URI na Requisição
  30. 30. JAX - RS Interface 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(); }
  31. 31. 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.
  32. 32. 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); }
  33. 33. JAX - RS Consumindo e Testando Serviços RESTful
  34. 34. Consumindo e Testando Serviços REST RESTClient
  35. 35. Consumindo e Testando Serviços REST cURL
  36. 36. Consumindo e Testando Serviços REST NetBeans
  37. 37. Consumindo e Testando Serviços REST Consumindo Serviços RESTful JAXB
  38. 38. Consumindo e Testando Serviços REST JAXB - 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; } ..}
  39. 39. Consumindo e Testando Serviços REST JAXB - Exemplo <?xml version="1.0" encoding="UTF-8"?> <palestrante num_cpf="123456789"> Classe JAXB Gera <nome>Wagner</nome> <idade>29</idade> <statusCivil>Casado</statusCivil> @Path("/Palestrantes/") </ palestrante > 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); } }
  40. 40. Consumindo e Testando Serviços REST Bibliotecas JavaScript.
  41. 41. 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"); } }); });
  42. 42. 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); } });
  43. 43. Enfim, Mashups Mashups
  44. 44. Mashups Definições: Aplicação Web composta de Serviços existentes e dados. Utiliza APIs abertas de outras aplicações Web.
  45. 45. Mashups Propriedades: Pouco esforço de programação.  Diversas ferramentas (Maioria baseada em JavaScript e (X)HTML) Aplicações Web Interativas
  46. 46. Mashups Propriedades:  Agrega conteúdo de mais de uma fonte.
  47. 47. 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
  48. 48. 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.
  49. 49. Mashups Componentes de uma biblioteca Client-Side  Criação de um serviço server-side.  Criação de um arquivo JScript para o client-side  Posso criar um arquivo CSS para o cliente-side  Posso documentar a API  Posso criar exemplos de demonstração
  50. 50. Mashups Segurança Token Baseada em Sessão / Hash Baseada em URL – chave de API Content Type utilizando Autenticação
  51. 51. Mashups Arquitetura de um Mashup
  52. 52. Mashups Por que não utilizar Web Services SOAP ou WS* ? Veja: http://netfeijao.blogspot.com/2009/05/web-services-ws-vs-rest.html
  53. 53. Mashups SOAP e WS-* Pontos Positivos Pontos Negativos •Diversas ferramentas de desenvolvimento. •Diversos padrões. •Tipagem forte e um vocabulário bem •Complexidade dos padrões. definido. •Performance. •Quando utilizado sobre HTTP, dificilmente é •Mensagens podem ficar muito bloqueado por proxies e firewalls. extensas, por serem codificadas •Permite o uso de diferentes tipos de com XML protocolos. •Plataforma independente. •Linguagem independente
  54. 54. Mashups REST Pontos Positivos Pontos Negativos •Simplicidade, interface imutável, agnóstica. •Faltam padrões. •Interação assíncrona, não possui estado. •Falta de segurança. •Facilidade de adoção, pois não requer uma •Não é indicado para trafegar grande infra-estrutura, menos um middleware grandes volumes de parâmetros WS-* ou camada adicional. via URI. •Utiliza a web como meio de transporte, •Em muitas empresas apenas os sendo assim uma carga baixa na rede. métodos GET e POST do HTTP •Utilizada por grande parte das aplicações são liberados em proxies e Web 2.0. (Google, Flickr, Amazon, etc..). firewalls. Portanto, ótimo para mashups. •Não há mecanismos de transação. •Curva de aprendizagem baixa. •Não existe um padrão como UDDI.
  55. 55. Ferramentas
  56. 56. Mashups - Ferramentas Yahoo Pipes!
  57. 57. Mashups - Ferramentas
  58. 58. Mashups – Ferramentas
  59. 59. Mashups - Ferramentas
  60. 60. Mashups - Ferramentas
  61. 61. Mashups
  62. 62. De Web Services REST aos Mashups OBRIGADO Contatos Email: wrsconsulting@gmail.com Blog: http://netfeijao.blogspot.com Twitter: http://twitter.com/wrsantos

×