REST Web Services com
        Java
Sobre
● Programação ABAP
● BI com a ferramenta Business Objects
● Suporte ferramentas JBoss
● Paralelamente:
   ○ S2 programação, principalmente Java
   ○ JavaFX
   ○ Comunidades e fóruns
   ○ Projetos Open Source
● Com WEB Services RESTful:
   ○ TCC
   ○ APIs RESTful
   ○ RESTEasy
● Na WEB:
   ○ @william_antonio
   ○ http://williamantonio.wordpress.com
Web Services
● Tecnologia para integração de sistemas
● Independência de plataforma
● Utiliza padrões abertos
● Rock star em sistemas atuais
● Baixo acoplamento entre quem consome e quem produz
● WS-* e SOAP
    ○ Uma URL, um método HTTP, um formato
    ○ Muito código gerado (eca!)
    ○ HTTP é *desprezado*
    ○ Soluções dadas por grandes empresas com um "toque
      especial" = Estaca zero de novo!
    ○ Complexo?
    ○ Imensa discussão SOAP/WS X REST: http://bit.
      ly/s0Gofp
http://www.arcwebservices.com/arcwebonline/services/soap_samples.htm?
REST
● A WEB é um sucesso!
● REST? Tese de Roy Fielding
● "The idea of REST is essentially a reverse-engineering of how the Web
  works" - Java SOA Cookbook
● Um estilo arquitetural com os seguintes princípios
    ○ Foco em recursos
    ○ Identificação única de cada recurso
    ○ Interface uniforme
    ○ Stateless
    ○ Múltiplas representações de um mesmo recurso
● Vantagens:
    ○ Escalabilidade
    ○ Simplicidade
    ○ Representa sua aplicação através de recursos ao invés de
      métodos não explicados (vantagem?)
REST com HTTP
● HTTP é perfeito para aplicarmos os princípios REST:
    ○ Identificação através de URIs
    ○ Interface uniforme:
        ■ Verbos HTTP: GET, POST, PUT, DELETE...
        ■ Códigos informativos: 404, 201, 500 e outras dezenas...
● Simples e praticamente acessível de qualquer linguagem de
  programação
● HTTP é maduro e consolidado
● Simples:
    ○ No cabeçalho da requisição informações como formatos de
      dados, codificação, linguagem, entre outras
    ○ No corpo da requisição a representação do recurso
● Autenticação, encriptação, autorização: Use o que o HTTP
  oferece
Uma requisição HTTP
RESTful WEB Services

● Web Services que seguem os princípios REST
● Restful Web Services é o livro!
● Algo a acrescentar:
    ○ GET sempre seguro
    ○ GET, PUT, DELETE idempotentes, POST não
    ○ Transações com REST
    ○ Como criar REST WS com Java, Ruby, Python
● ROA - Resource Oriented Architeture
● Comunidade em ação
    ○ Críticas a muitos WEB Services e APIs existente. São
      realmente REST?
    ○ HATEOAS - Ligar os recursos através de URIs para
      implementar o sistema. O cliente usa as URIs para a próxima
      iteração com o servidor
Na prática
● Recurso Cachorro
   ○ GET /cachorro/{id}       Recupera
   ○ DELETE /cachorro/{id}    Apaga
   ○ POST /cachorro           Cria
   ○ GET /cachorro            Recupera todos
● Formatos: XML e JSON
● Códigos HTTP
   ○ 404 - Não encontrado
   ○ 500 - Erro desconhecido no servidor
   ○ 201 - Criado
RESTful WEB Services com Java

● Usar Servlets? Usar frameworks de terceiros não
  padronizados? Nada disso!!
● JAX-RS
● Foco em POJOs e anotações
● JSR 311 e JSR 339 (a caminho)
● Aplicações JAX-RS podem rodar em um simples
  servlet contêiner
● Acreditem em mim, programar em Java é prazeroso de
  novo!
● Você não faz parse de XML nem JSON, nem de nenhum
  outro formato famoso
● Você só anota e programa sua lógica de negócio
● O livro da vez é RESTful Java with JAX-RS.
A maneira JAX-RS de programar

● Anote suas classes e métodos com @Path para dizer qual
  URI seus métodos representam
● Use @GET, @POST, @DELETE, @PUT para dizer qual o
  método HTTP
● Use @Produces para determinar os formatos de dados que
  serão produzidos
● JAX-RS usara os métodos acima para determinar qual
  método será chamado de acordo com a requisição HTTP
● Pode usar uma interface para representar seus recursos
● Use "templates" em Paths para injetar parâmetros que
  estão na URI através das anotações @PathParam e
  @QueryParam
Exemplo
          ● recuperaFoo responde a GET em
            /foo/{id}, onde id é um número (
            responde a /foo/666, mas não a
            /foo/abc)

          ● criaFoo responde a POST em /foo

          ● apagaFoo responde a DELETE em
            /foo

          ● atualizaFoo responde a PUT em /foo
            cujo corpo da requisição contenha uma
            representação de Foo

          ● O método chamado é baseado nas
            informações da requisição HTTP
● Implementação de JAX-RS
● Oferece mais que a especificação
● É um projeto JBoss
● Open Source
● Características extra JAX-RS:
    ○ Interceptores
    ○ API Cliente
    ○ Suporte a muitos formatos
    ○ Ligação de recursos
    ○ API JavaScript
    ○ Integração com Spring, EJB, CDI, outros
    ○ Suporte a testes e contêiner integrado para testes
    ○ Mais...
Uma API que usa RESTful WS
● WEB Services REST para ler informações dos nossos
  candidatos
● Falha em alguns princípios REST      :(
● Dados só em XML
● Implementado com Jersey
● Segunda versão a caminho
● Publicada no ProgrammableWEB         :O
   ○ http://www.programmableweb.com/api/brazilian-election-
     candidates
● Código aberto                         :)
   ○ https://bitbucket.org/williamAntonio/elei-es-abertas
● Demonstração "ao vivo"              :)
   ○ http://williamprogrammer.com/EleicoesAbertas/
Mais APIs que usam JAX-RS

● Consumir APIs É TDB
   ○ Twitter
   ○ Facebook
   ○ APIs do Google
● Exemplo de um cliente simples do Last FM usando
  RESTEasy:
   ○ http://javafree.uol.com.br/artigo/882228/Um-simples-
     cliente-da-API-do-LastFM-com-RESTEasy.html
● Entre no ProgrammableWeb.com e seja feliz. Vamos
  entrar?
   ○ http://www.programmableweb.com/apis/directory/1?
     protocol=REST
Programar!
● Vamos fazer um CRUD de um sistema fictício de celulares
● Nosso cliente já tem a base e o acesso a base de dados
  prontos, agora quer uma API RESTful
● Nossas URIs:


   Método        URI        Formato             Faz o que?

  GET       /celular        XML e JSON   recupera todos celulares
  GET       /celular/{id}   XML e JSON   recupera um celular de acordo
                                         com o ID
  DELETE    /celular/{id}   XML e JSON   apaga celular de acordo com ID
  POST      /celular        XML e JSON   cria novo celular


    Sem código aqui, vamos para a IDE!
Além da apresentação
● Livros:
    ○ RESTful Web Services
    ○ RESTful Java with JAX-RS
    ○ REST In Practice*
● WEB
    ○ Tese do Roy Fielding
        ■ http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
    ○ JAX-RS
        ■ http://jcp.org/en/jsr/detail?id=311
        ■ http://jcp.org/en/jsr/detail?id=339
        ■ http://www.jboss.org/resteasy
    ○ Blogs
        ■ http://blog.steveklabnik.com/2011/07/03/nobody-
          understands-rest-or-http.html
        ■ http://timelessrepo.com/haters-gonna-hateoas
        ■ http://martinfowler.com/articles/richardsonMaturityModel.
          html
Perguntas?
Brindes
Muito Obrigado!

Rest web services com Java

  • 1.
  • 2.
    Sobre ● Programação ABAP ●BI com a ferramenta Business Objects ● Suporte ferramentas JBoss ● Paralelamente: ○ S2 programação, principalmente Java ○ JavaFX ○ Comunidades e fóruns ○ Projetos Open Source ● Com WEB Services RESTful: ○ TCC ○ APIs RESTful ○ RESTEasy ● Na WEB: ○ @william_antonio ○ http://williamantonio.wordpress.com
  • 3.
    Web Services ● Tecnologiapara integração de sistemas ● Independência de plataforma ● Utiliza padrões abertos ● Rock star em sistemas atuais ● Baixo acoplamento entre quem consome e quem produz ● WS-* e SOAP ○ Uma URL, um método HTTP, um formato ○ Muito código gerado (eca!) ○ HTTP é *desprezado* ○ Soluções dadas por grandes empresas com um "toque especial" = Estaca zero de novo! ○ Complexo? ○ Imensa discussão SOAP/WS X REST: http://bit. ly/s0Gofp
  • 4.
  • 5.
    REST ● A WEBé um sucesso! ● REST? Tese de Roy Fielding ● "The idea of REST is essentially a reverse-engineering of how the Web works" - Java SOA Cookbook ● Um estilo arquitetural com os seguintes princípios ○ Foco em recursos ○ Identificação única de cada recurso ○ Interface uniforme ○ Stateless ○ Múltiplas representações de um mesmo recurso ● Vantagens: ○ Escalabilidade ○ Simplicidade ○ Representa sua aplicação através de recursos ao invés de métodos não explicados (vantagem?)
  • 6.
    REST com HTTP ●HTTP é perfeito para aplicarmos os princípios REST: ○ Identificação através de URIs ○ Interface uniforme: ■ Verbos HTTP: GET, POST, PUT, DELETE... ■ Códigos informativos: 404, 201, 500 e outras dezenas... ● Simples e praticamente acessível de qualquer linguagem de programação ● HTTP é maduro e consolidado ● Simples: ○ No cabeçalho da requisição informações como formatos de dados, codificação, linguagem, entre outras ○ No corpo da requisição a representação do recurso ● Autenticação, encriptação, autorização: Use o que o HTTP oferece
  • 7.
  • 8.
    RESTful WEB Services ●Web Services que seguem os princípios REST ● Restful Web Services é o livro! ● Algo a acrescentar: ○ GET sempre seguro ○ GET, PUT, DELETE idempotentes, POST não ○ Transações com REST ○ Como criar REST WS com Java, Ruby, Python ● ROA - Resource Oriented Architeture ● Comunidade em ação ○ Críticas a muitos WEB Services e APIs existente. São realmente REST? ○ HATEOAS - Ligar os recursos através de URIs para implementar o sistema. O cliente usa as URIs para a próxima iteração com o servidor
  • 9.
    Na prática ● RecursoCachorro ○ GET /cachorro/{id} Recupera ○ DELETE /cachorro/{id} Apaga ○ POST /cachorro Cria ○ GET /cachorro Recupera todos ● Formatos: XML e JSON ● Códigos HTTP ○ 404 - Não encontrado ○ 500 - Erro desconhecido no servidor ○ 201 - Criado
  • 10.
    RESTful WEB Servicescom Java ● Usar Servlets? Usar frameworks de terceiros não padronizados? Nada disso!! ● JAX-RS ● Foco em POJOs e anotações ● JSR 311 e JSR 339 (a caminho) ● Aplicações JAX-RS podem rodar em um simples servlet contêiner ● Acreditem em mim, programar em Java é prazeroso de novo! ● Você não faz parse de XML nem JSON, nem de nenhum outro formato famoso ● Você só anota e programa sua lógica de negócio ● O livro da vez é RESTful Java with JAX-RS.
  • 11.
    A maneira JAX-RSde programar ● Anote suas classes e métodos com @Path para dizer qual URI seus métodos representam ● Use @GET, @POST, @DELETE, @PUT para dizer qual o método HTTP ● Use @Produces para determinar os formatos de dados que serão produzidos ● JAX-RS usara os métodos acima para determinar qual método será chamado de acordo com a requisição HTTP ● Pode usar uma interface para representar seus recursos ● Use "templates" em Paths para injetar parâmetros que estão na URI através das anotações @PathParam e @QueryParam
  • 12.
    Exemplo ● recuperaFoo responde a GET em /foo/{id}, onde id é um número ( responde a /foo/666, mas não a /foo/abc) ● criaFoo responde a POST em /foo ● apagaFoo responde a DELETE em /foo ● atualizaFoo responde a PUT em /foo cujo corpo da requisição contenha uma representação de Foo ● O método chamado é baseado nas informações da requisição HTTP
  • 13.
    ● Implementação deJAX-RS ● Oferece mais que a especificação ● É um projeto JBoss ● Open Source ● Características extra JAX-RS: ○ Interceptores ○ API Cliente ○ Suporte a muitos formatos ○ Ligação de recursos ○ API JavaScript ○ Integração com Spring, EJB, CDI, outros ○ Suporte a testes e contêiner integrado para testes ○ Mais...
  • 14.
    Uma API queusa RESTful WS ● WEB Services REST para ler informações dos nossos candidatos ● Falha em alguns princípios REST :( ● Dados só em XML ● Implementado com Jersey ● Segunda versão a caminho ● Publicada no ProgrammableWEB :O ○ http://www.programmableweb.com/api/brazilian-election- candidates ● Código aberto :) ○ https://bitbucket.org/williamAntonio/elei-es-abertas ● Demonstração "ao vivo" :) ○ http://williamprogrammer.com/EleicoesAbertas/
  • 15.
    Mais APIs queusam JAX-RS ● Consumir APIs É TDB ○ Twitter ○ Facebook ○ APIs do Google ● Exemplo de um cliente simples do Last FM usando RESTEasy: ○ http://javafree.uol.com.br/artigo/882228/Um-simples- cliente-da-API-do-LastFM-com-RESTEasy.html ● Entre no ProgrammableWeb.com e seja feliz. Vamos entrar? ○ http://www.programmableweb.com/apis/directory/1? protocol=REST
  • 16.
    Programar! ● Vamos fazerum CRUD de um sistema fictício de celulares ● Nosso cliente já tem a base e o acesso a base de dados prontos, agora quer uma API RESTful ● Nossas URIs: Método URI Formato Faz o que? GET /celular XML e JSON recupera todos celulares GET /celular/{id} XML e JSON recupera um celular de acordo com o ID DELETE /celular/{id} XML e JSON apaga celular de acordo com ID POST /celular XML e JSON cria novo celular Sem código aqui, vamos para a IDE!
  • 17.
    Além da apresentação ●Livros: ○ RESTful Web Services ○ RESTful Java with JAX-RS ○ REST In Practice* ● WEB ○ Tese do Roy Fielding ■ http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm ○ JAX-RS ■ http://jcp.org/en/jsr/detail?id=311 ■ http://jcp.org/en/jsr/detail?id=339 ■ http://www.jboss.org/resteasy ○ Blogs ■ http://blog.steveklabnik.com/2011/07/03/nobody- understands-rest-or-http.html ■ http://timelessrepo.com/haters-gonna-hateoas ■ http://martinfowler.com/articles/richardsonMaturityModel. html
  • 18.
  • 19.
  • 20.