0
De Web Services RESTFul a
aplicações Mashups




Wagner Roberto dos Santos
  Arquiteto Software/Scrum Master
Apresentação
• Arquiteto Java EE / Scrum Master
• Lead Editor da Queue Arquitetura do Portal InfoQ
  Brasil (http://infoq....
Agenda

O que é REST?
JAX-RS – Java API for RESTful Web
 Services
Consumindo e testando serviços REST
O que são Mashup...
Afinal, o que é REST?
REST = REpresentational State Transfer

REST ≠ Tecnologia
REST ≠ Padrão
REST = Estilo de Arquitetura...
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 integr...
Afinal, O que é REST?
HTTP Request
Host: www.mundojava.com.br
                                                            ...
Afinal, O que é REST?
  Clientes Web    Servidores
Afinal, O que é REST?
Recursos Web
Afinal, O que é REST?
Media Types

atom+xml
xhtml+xml
mpeg4-generic
jpeg
html
3gpp-tt
form-data
Afinal, O que é REST?
Recursos e Representações

URI – Uniform Resource Identifier
Identificador único de um recurso físic...
Afinal, O que é REST?
URI – Uniform Resource Identifier
Exemplos
ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rf...
Afinal, O que é REST?
O recurso é exposto pela URI

http://www.justjava.com.br/palestrantes/wrsantos
http://www.justjava.c...
Afinal, O que é REST?
Representações
em diversos sabores..

 XML
 JSON
 (X)HTML
Afinal, O que é REST?
Representações
Negociação de conteúdo.
                HTTP Request
                Host: justjava.c...
Afinal, O que é REST?
Métodos HTTP
GET       Solicita que o servidor envie um recurso.

PUT       O inverso do GET. Realiz...
Afinal, O que é REST?
Então REST é..

REpresentational State Transfer

Recursos são identificados por URIs

Métodos (verbo...
Afinal, O que é REST?
                   Request                                  justjava.com.br

 Exemplo:          Host...
Afinal, O que é REST?
Códigos de Status

   Range Descrição
   100-101   Informacional.
   200-206   Sucesso.
   300-305  ...
JAX –RS - Java API for RESTful Web Services
                  JSR-311
JAX - RS
Objetivos

 Definida pela JSR-311.

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

 Uma alternativ...
JAX - RS

Implementações conhecidas




Jersey
JAX - RS
Trabalhando com Recursos
Anotação @Path

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

“/pales...
JAX - RS
Acessando os Recursos

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

e devem ser atribuídas a m...
JAX - RS
Definindo as Representações
Para tratamento de Request
 @Consumes

Exemplo:
@PUT
@Consumes("application/xml","app...
JAX - RS
Definindo as Representações
Para tratamento de Response
 @Produces

Exemplo:
@GET
@Produces({"application/xml", "...
JAX - RS
Extraindo valores da URI na Requisição
@PathParam     Extrai um parâmetro informado no
               caminho da ...
JAX - RS
Extraindo valores da URI na Requisição
Exemplo:
@Path("/Palestrantes/")
public class EventoResource {
  @GET
  @P...
JAX - RS
Extraindo valores da URI na Requisição
JAX - RS
Interface uniforme para Response
@PUT
@Consumes("application/xml")
@Path("/Palestrantes/update/")
public Response...
JAX - RS

Tratando Exceções

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

• Pode ser...
JAX - RS
Tratando Exceções
@GET
@Produces("application/xml")
@Path("/autores/{palestrante}/{idade: [0-9]+}/")
public Pales...
JAX - RS




Consumindo e Testando Serviços
           RESTful
Consumindo e Testando Serviços REST
 RESTClient
Consumindo e Testando Serviços REST
 cURL
Consumindo e Testando Serviços REST
 NetBeans
Consumindo e Testando Serviços REST

  Consumindo Serviços RESTful
   JAXB
Consumindo e Testando Serviços REST
  JAXB - Exemplo
 @XmlRootElement(name=“palestrante")
 @XmlType(name="", propOrder={"n...
Consumindo e Testando Serviços REST
   JAXB - Exemplo
                                   <?xml version="1.0" encoding="UTF...
Consumindo e Testando Serviços REST

  Bibliotecas JavaScript.
Consumindo e Testando Serviços REST
 Bibliotecas JavaScript - jQuery

$.getJSON("http://api.flickr.com/services/rest/?
   ...
Consumindo e Testando Serviços REST
  Bibliotecas JavaScript - jQuery

var myUrl = "http://justjava.com.br/palestrantes/wr...
Enfim, Mashups




            Mashups
Mashups
 Definições:

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

 Utiliza APIs abertas de outras aplicaçõe...
Mashups
 Propriedades:

 Pouco esforço de programação.
    Diversas ferramentas (Maioria baseada em
     JavaScript e (X...
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
 ...
Mashups
 Overview em Mashups Client-Side

  Tecnologia Centrada no Cliente

  Prós
    Facilidades em adicionar funcion...
Mashups
Componentes de uma biblioteca
 Client-Side

 Criação de um serviço server-side.
 Criação de um arquivo JScript p...
Mashups

Segurança

Token
Baseada em Sessão / Hash
Baseada em URL – chave de API
Content Type utilizando Autenticação
Mashups
          Arquitetura de um Mashup
Mashups

                                      Por que não
                                        utilizar
              ...
Mashups
   SOAP e WS-*
Pontos Positivos                               Pontos Negativos
•Diversas ferramentas de desenvolvi...
Mashups
   REST
Pontos Positivos                           Pontos Negativos
•Simplicidade, interface imutável, agnóstica. ...
Ferramentas
Mashups - Ferramentas
Yahoo Pipes!
Mashups - Ferramentas
Mashups – Ferramentas
Mashups - Ferramentas
Mashups - Ferramentas
Mashups
De Web Services REST aos Mashups




  OBRIGADO
  Contatos
  Email: wrsconsulting@gmail.com
  Blog: http://netfeijao.blogs...
Upcoming SlideShare
Loading in...5
×

De Web Services RESTful a Aplicações Mashup

3,240

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,240
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
94
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

Transcript of "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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×