SlideShare uma empresa Scribd logo
1 de 18
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(você não fica preso a um
  vendedor)
● 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 usará 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
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?
Muito Obrigado!

Mais conteúdo relacionado

Mais procurados

Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]Carl Edwin
 
Criando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPCriando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPRenan Gonçalves
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoDavid Robert Camargo de Campos
 
Criando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHPCriando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHP2km interativa!
 
REST: Padrões e Melhores Práticas
REST: Padrões e Melhores PráticasREST: Padrões e Melhores Práticas
REST: Padrões e Melhores PráticasAlessandro Oliveira
 
Como um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Como um verdadeiro sistema REST funciona: arquitetura e performance na AbrilComo um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Como um verdadeiro sistema REST funciona: arquitetura e performance na AbrilLuis Cipriani
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
Web 2.0 e RIA com PHP
Web 2.0 e RIA com PHPWeb 2.0 e RIA com PHP
Web 2.0 e RIA com PHPAdler Medrado
 
Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)Ricardo Terra
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0jesuinoPower
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...Tchelinux
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Aula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisAula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisDaniel Brandão
 
Introdução a Web Services
Introdução a Web ServicesIntrodução a Web Services
Introdução a Web ServicesFabio Leal
 
Webservices e Computação em Nuvem com PHP
Webservices e Computação em Nuvem com PHPWebservices e Computação em Nuvem com PHP
Webservices e Computação em Nuvem com PHPFlávio Lisboa
 
Web Services (in portuguese)
Web Services (in portuguese)Web Services (in portuguese)
Web Services (in portuguese)Bruno Pedro
 

Mais procurados (19)

Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
Monografia restful -_2013_-_desenvolvimento_v17-final-2014[1]
 
Criando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPCriando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHP
 
Web Services Rest
Web Services RestWeb Services Rest
Web Services Rest
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
 
Criando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHPCriando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHP
 
REST: Padrões e Melhores Práticas
REST: Padrões e Melhores PráticasREST: Padrões e Melhores Práticas
REST: Padrões e Melhores Práticas
 
Como um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Como um verdadeiro sistema REST funciona: arquitetura e performance na AbrilComo um verdadeiro sistema REST funciona: arquitetura e performance na Abril
Como um verdadeiro sistema REST funciona: arquitetura e performance na Abril
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Web 2.0 e RIA com PHP
Web 2.0 e RIA com PHPWeb 2.0 e RIA com PHP
Web 2.0 e RIA com PHP
 
Webservices
WebservicesWebservices
Webservices
 
Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Aula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisAula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas Condicionais
 
Introdução a Web Services
Introdução a Web ServicesIntrodução a Web Services
Introdução a Web Services
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Webservices e Computação em Nuvem com PHP
Webservices e Computação em Nuvem com PHPWebservices e Computação em Nuvem com PHP
Webservices e Computação em Nuvem com PHP
 
Web Services (in portuguese)
Web Services (in portuguese)Web Services (in portuguese)
Web Services (in portuguese)
 

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 JavajesuinoPower
 
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
 
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
 
REST - The right way
REST - The right wayREST - The right way
REST - The right waysantosluis87
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com SpringMateus Malaquias
 
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
 
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
 
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
 
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDesenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDomingos Teruel
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]Filipe Ximenes
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPCarlos Santos
 
Testando sua API com HTTParty e RSpec
Testando sua API com HTTParty e RSpecTestando sua API com HTTParty e RSpec
Testando sua API com HTTParty e RSpecDeyvirson Mendonça
 
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
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Desenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EEDesenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EELuan Felipe Knebel
 
4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdf4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdfRubenManhia
 

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
 
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
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
 
REST - The right way
REST - The right wayREST - The right way
REST - The right way
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com Spring
 
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]
 
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
 
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
 
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDesenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
 
Testando sua API com HTTParty e RSpec
Testando sua API com HTTParty e RSpecTestando sua API com HTTParty e RSpec
Testando sua API com HTTParty e RSpec
 
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
RestRest
Rest
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Desenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EEDesenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EE
 
4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdf4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdf
 
REST-fuuuu
REST-fuuuuREST-fuuuu
REST-fuuuu
 

Mais de JugVale

Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: IntroduçãoJugVale
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnitJugVale
 
Introdução ao JEE
Introdução ao JEEIntrodução ao JEE
Introdução ao JEEJugVale
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)JugVale
 
Abertura TI No Vale
Abertura TI No ValeAbertura TI No Vale
Abertura TI No ValeJugVale
 
2º encontro do jug vale
2º encontro do jug vale2º encontro do jug vale
2º encontro do jug valeJugVale
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao AndroidJugVale
 
NoSQL com Cassandra
NoSQL com CassandraNoSQL com Cassandra
NoSQL com CassandraJugVale
 

Mais de JugVale (9)

Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: Introdução
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
 
Webdev
WebdevWebdev
Webdev
 
Introdução ao JEE
Introdução ao JEEIntrodução ao JEE
Introdução ao JEE
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)
 
Abertura TI No Vale
Abertura TI No ValeAbertura TI No Vale
Abertura TI No Vale
 
2º encontro do jug vale
2º encontro do jug vale2º encontro do jug vale
2º encontro do jug vale
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
NoSQL com Cassandra
NoSQL com CassandraNoSQL com Cassandra
NoSQL com Cassandra
 

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(você não fica preso a um vendedor) ● 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 usará 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. 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