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.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
 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
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...
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 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
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ísico ou abstrato.

                      URN: Uniform Resource Name
Uma URI pode ser
classificada como:
                      URL: Uniform Resource Locator
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
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
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.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
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.
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.
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 >
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.
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 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 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.
JAX - RS
Acessando 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ções
Para tratamento de Request
 @Consumes

Exemplo:
@PUT
@Consumes("application/xml","application/json")
@Path("/autores/")
public Response putPessoa(PessoaBinding pessoa) { ... }
.
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
}
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.
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);
   }
}
JAX - RS
Extraindo valores da URI na Requisição
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();
}
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 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={"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 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);
   }
}
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-side
 Posso criar um arquivo CSS para o cliente-side
 Posso documentar a API
 Posso criar exemplos de demonstração
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
                                      Web Services
                                     SOAP ou WS* ?




Veja: http://netfeijao.blogspot.com/2009/05/web-services-ws-vs-rest.html
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
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.
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.blogspot.com
  Twitter: http://twitter.com/wrsantos

De Web Services RESTful a Aplicações Mashup

  • 1.
    De Web ServicesRESTFul a aplicações Mashups Wagner Roberto dos Santos Arquiteto Software/Scrum Master
  • 2.
    Apresentação • Arquiteto JavaEE / 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.
    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.
    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.
    Afinal, o queé REST? Como por exemplo .... ... a própria WEB.
  • 6.
    O Pai daCrianç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.
    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.
    Afinal, O queé REST? Clientes Web Servidores
  • 9.
    Afinal, O queé REST? Recursos Web
  • 10.
    Afinal, O queé REST? Media Types atom+xml xhtml+xml mpeg4-generic jpeg html 3gpp-tt form-data
  • 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.
    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.
    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.
    Afinal, O queé REST? Representações em diversos sabores..  XML  JSON  (X)HTML
  • 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.
    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.
    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.
    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.
    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.
    JAX –RS -Java API for RESTful Web Services JSR-311
  • 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.
    JAX - RS Implementaçõesconhecidas Jersey
  • 23.
    JAX - RS Trabalhandocom 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.
    JAX - RS Acessandoos Recursos @GET @POST @PUT @DELETE @HEAD @HttpMethod(“MétodoCustomizado”) e devem ser atribuídas a métodos públicos
  • 25.
    JAX - RS Definindoas Representações Para tratamento de Request @Consumes Exemplo: @PUT @Consumes("application/xml","application/json") @Path("/autores/") public Response putPessoa(PessoaBinding pessoa) { ... } .
  • 26.
    JAX - RS Definindoas 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.
    JAX - RS Extraindovalores 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.
    JAX - RS Extraindovalores 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.
    JAX - RS Extraindovalores da URI na Requisição
  • 30.
    JAX - RS Interfaceuniforme 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.
    JAX - RS TratandoExceçõ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.
    JAX - RS TratandoExceçõ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.
    JAX - RS Consumindoe Testando Serviços RESTful
  • 34.
    Consumindo e TestandoServiços REST RESTClient
  • 35.
    Consumindo e TestandoServiços REST cURL
  • 36.
    Consumindo e TestandoServiços REST NetBeans
  • 37.
    Consumindo e TestandoServiços REST Consumindo Serviços RESTful JAXB
  • 38.
    Consumindo e TestandoServiç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.
    Consumindo e TestandoServiç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.
    Consumindo e TestandoServiços REST Bibliotecas JavaScript.
  • 41.
    Consumindo e TestandoServiç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.
    Consumindo e TestandoServiç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.
  • 44.
    Mashups Definições: AplicaçãoWeb composta de Serviços existentes e dados. Utiliza APIs abertas de outras aplicações Web.
  • 45.
    Mashups Propriedades: Poucoesforço de programação.  Diversas ferramentas (Maioria baseada em JavaScript e (X)HTML) Aplicações Web Interativas
  • 46.
    Mashups Propriedades: Agrega conteúdo de mais de uma fonte.
  • 47.
    Mashups Formato deDados  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.
    Mashups Overview emMashups 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.
    Mashups Componentes de umabiblioteca 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.
    Mashups Segurança Token Baseada em Sessão/ Hash Baseada em URL – chave de API Content Type utilizando Autenticação
  • 51.
    Mashups Arquitetura de um Mashup
  • 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.
    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.
    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.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
    De Web ServicesREST aos Mashups OBRIGADO Contatos Email: wrsconsulting@gmail.com Blog: http://netfeijao.blogspot.com Twitter: http://twitter.com/wrsantos