SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
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!

Mais conteúdo relacionado

Mais procurados

Criando aplicações java fx em minutos
Criando aplicações java fx em minutosCriando aplicações java fx em minutos
Criando aplicações java fx em minutosBruno Oliveira
 
JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012jesuinoPower
 
JavaFX: Desktop para desenvolvedores WEB
JavaFX: Desktop para desenvolvedores WEBJavaFX: Desktop para desenvolvedores WEB
JavaFX: Desktop para desenvolvedores WEBjesuinoPower
 
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SPBoas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SPjesuinoPower
 
Introdução ao LiveOak
Introdução ao LiveOakIntrodução ao LiveOak
Introdução ao LiveOakjesuinoPower
 
Chega de lendas! JavaFX em Android
Chega de lendas! JavaFX em AndroidChega de lendas! JavaFX em Android
Chega de lendas! JavaFX em AndroidBruno Oliveira
 
Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFXjesuinoPower
 
Quercus - Running PHP over Java
Quercus - Running PHP over Java Quercus - Running PHP over Java
Quercus - Running PHP over Java Jeff Prestes
 
O CartolaFC e o processo de desenvolvimento na globo.com
O CartolaFC e o processo de desenvolvimento na globo.comO CartolaFC e o processo de desenvolvimento na globo.com
O CartolaFC e o processo de desenvolvimento na globo.comAlexandre Saboia Fuziyama
 
Javascript levado a sério
Javascript levado a sérioJavascript levado a sério
Javascript levado a sériosaspi2
 
A Evolução do Front end
A Evolução do Front endA Evolução do Front end
A Evolução do Front endDouglas Matoso
 
Conectando jBPM com o mundo - TDC 2014 SP
Conectando jBPM com o mundo - TDC 2014 SPConectando jBPM com o mundo - TDC 2014 SP
Conectando jBPM com o mundo - TDC 2014 SPjesuinoPower
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?Fabio Janiszevski
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimentamichel adriano medeiros
 

Mais procurados (20)

Criando aplicações java fx em minutos
Criando aplicações java fx em minutosCriando aplicações java fx em minutos
Criando aplicações java fx em minutos
 
JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012
 
JavaFX: Desktop para desenvolvedores WEB
JavaFX: Desktop para desenvolvedores WEBJavaFX: Desktop para desenvolvedores WEB
JavaFX: Desktop para desenvolvedores WEB
 
Jclouds jug vale
Jclouds jug valeJclouds jug vale
Jclouds jug vale
 
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SPBoas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
 
Introdução ao LiveOak
Introdução ao LiveOakIntrodução ao LiveOak
Introdução ao LiveOak
 
Chega de lendas! JavaFX em Android
Chega de lendas! JavaFX em AndroidChega de lendas! JavaFX em Android
Chega de lendas! JavaFX em Android
 
Jugvale
JugvaleJugvale
Jugvale
 
JEE nas nuvens: uma introdução ao openshift
JEE nas nuvens:  uma introdução ao openshiftJEE nas nuvens:  uma introdução ao openshift
JEE nas nuvens: uma introdução ao openshift
 
Groovy stack
Groovy stackGroovy stack
Groovy stack
 
Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
 
Quercus - Running PHP over Java
Quercus - Running PHP over Java Quercus - Running PHP over Java
Quercus - Running PHP over Java
 
Javascript para adultos
Javascript para adultosJavascript para adultos
Javascript para adultos
 
O CartolaFC e o processo de desenvolvimento na globo.com
O CartolaFC e o processo de desenvolvimento na globo.comO CartolaFC e o processo de desenvolvimento na globo.com
O CartolaFC e o processo de desenvolvimento na globo.com
 
Javascript levado a sério
Javascript levado a sérioJavascript levado a sério
Javascript levado a sério
 
A Evolução do Front end
A Evolução do Front endA Evolução do Front end
A Evolução do Front end
 
Conectando jBPM com o mundo - TDC 2014 SP
Conectando jBPM com o mundo - TDC 2014 SPConectando jBPM com o mundo - TDC 2014 SP
Conectando jBPM com o mundo - TDC 2014 SP
 
Palestra Netbeans 6 Campus Party
Palestra Netbeans 6 Campus PartyPalestra Netbeans 6 Campus Party
Palestra Netbeans 6 Campus Party
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
 

Destaque

Apresentação servidores de aplicação
Apresentação   servidores de aplicaçãoApresentação   servidores de aplicação
Apresentação servidores de aplicaçãoHelen Picoli
 
Java and SPARQL
Java and SPARQLJava and SPARQL
Java and SPARQLRaji Ghawi
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Caelum
 
Processadores de servidores apresentação
Processadores de servidores apresentaçãoProcessadores de servidores apresentação
Processadores de servidores apresentaçãoMiguel Ferreira
 

Destaque (6)

Apresentação servidores de aplicação
Apresentação   servidores de aplicaçãoApresentação   servidores de aplicação
Apresentação servidores de aplicação
 
Java and SPARQL
Java and SPARQLJava and SPARQL
Java and SPARQL
 
Virtualização
VirtualizaçãoVirtualização
Virtualização
 
Servidores de Aplicações
Servidores de AplicaçõesServidores de Aplicações
Servidores de Aplicações
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
 
Processadores de servidores apresentação
Processadores de servidores apresentaçãoProcessadores de servidores apresentação
Processadores de servidores apresentação
 

Semelhante a Rest web services com Java

REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com JavaJugVale
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaSensedia
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0jesuinoPower
 
Python Eve - APIs RESTful Profissionais em poucas linhas
Python Eve - APIs RESTful Profissionais em poucas linhasPython Eve - APIs RESTful Profissionais em poucas linhas
Python Eve - APIs RESTful Profissionais em poucas linhasRuda Filgueiras
 
Aplicações Web, Frameworks, REST e SPA
Aplicações Web, Frameworks, REST e SPAAplicações Web, Frameworks, REST e SPA
Aplicações Web, Frameworks, REST e SPAmarcosvpcortes
 
Apis palestra 7º JUG Vale
Apis palestra 7º JUG Vale Apis palestra 7º JUG Vale
Apis palestra 7º JUG Vale Pedro Hos
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03Ale Uehara
 
HTTP: A Base do Desenvolvimento Web - FISL 12
HTTP: A Base do Desenvolvimento Web - FISL 12HTTP: A Base do Desenvolvimento Web - FISL 12
HTTP: A Base do Desenvolvimento Web - FISL 12Alexandre Gaigalas
 
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]Filipe Ximenes
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Workshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIsWorkshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIsHeider Lopes
 
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMASO MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMASHeider Lopes
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]Igor Santos
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com SpringMateus Malaquias
 
REST - The right way
REST - The right wayREST - The right way
REST - The right waysantosluis87
 
Restful APIs com Spring 3
Restful APIs com Spring 3Restful APIs com Spring 3
Restful APIs com Spring 3Alex Miranda
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04Ale Uehara
 

Semelhante a Rest web services com Java (20)

REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha Básica
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0
 
Python Eve - APIs RESTful Profissionais em poucas linhas
Python Eve - APIs RESTful Profissionais em poucas linhasPython Eve - APIs RESTful Profissionais em poucas linhas
Python Eve - APIs RESTful Profissionais em poucas linhas
 
Aplicações Web, Frameworks, REST e SPA
Aplicações Web, Frameworks, REST e SPAAplicações Web, Frameworks, REST e SPA
Aplicações Web, Frameworks, REST e SPA
 
Apis palestra 7º JUG Vale
Apis palestra 7º JUG Vale Apis palestra 7º JUG Vale
Apis palestra 7º JUG Vale
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03
 
HTTP: A Base do Desenvolvimento Web - FISL 12
HTTP: A Base do Desenvolvimento Web - FISL 12HTTP: A Base do Desenvolvimento Web - FISL 12
HTTP: A Base do Desenvolvimento Web - FISL 12
 
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
 
Workshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIsWorkshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIs
 
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMASO MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com Spring
 
REST - The right way
REST - The right wayREST - The right way
REST - The right way
 
Restful APIs com Spring 3
Restful APIs com Spring 3Restful APIs com Spring 3
Restful APIs com Spring 3
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04
 

Rest web services com Java

  • 1. REST Web Services com Java
  • 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 ● 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
  • 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
  • 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 ● 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
  • 10. 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.
  • 11. 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
  • 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 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...
  • 14. 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/
  • 15. 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
  • 16. 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!
  • 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