SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
Novidades do
JAX-RS 2.0
Web Services RESTful com Java
Quem é William

● Usuário "Jesuino" do JavaFree e do GUJ
● Formado na FATEC de São José dos
  Campos
● Trabalhou com ABAP, BI e C. Atualmente
  Analista de Suporte na Red Hat
● Comunidade JavaFX
● Trabalha com JBoss e Portais
● Um dos Organizadores do JUG Vale
Agenda

●   Análise do problema
●   Web Services tradicionais
●   REST
●   RESTful WEB Services
●   REST e Java
●   JAX-RS 1.0
●   Novidades do JAX-RS 2.0
O problema


Como integrar sistemas implementados
com tecnologias variadas em ambientes
              distintos?
Padrões complexos e dependência
          de vendedores



                    A II
                   B O
RM              O R      P
       I      C
                                      DC OM
  C E
 D
Primeiras soluções eram complicadas
Web Services Tradicionais
    Basicamente troca de informação em XML
           entre o servidor e o cliente
                                  SOAP ao resgate
● Padrões abertos

● Independência de plataforma e
  linguagem de programação

● Total desacoplamento entre
  ambas partes
Uma URL, um método HTTP, vários XMLs




http://www.w3schools.com/soap/soap_example.asp
Autenticação?
 Autorização?
                Anexos?




                                    SSO?




Arquitetura?                                  Encriptação?

                      Transações?




Necessidades foram surgindo com o uso
Infinitos padrões
● WS-*
  ○ WS-Security
  ○ WS-Transaction
  ○ WS-Transfer
  ○ WS-Policy
  ○ WS-Signature
  ○ WS-Encryption
  ○ WS-Trust
  ○ WS-Federation
  ○ WS-Discovery
  ○ WS-Eventing
  ○ ...
● Arquiteturas complexa
● Centenas de ferramentas
Complicou de novo. E agora?




REST your SOAP, and don’t worry, be happy

                     Frase retirada desse artigo: http://demystifyit.com/hello-world/
REST
● Estilo Arquitetural

● Tese PHD de Roy Fielding

● "Engenharia reversa do
  funcionamento da WEB"

● Orientada a recursos
Principais características

● Tudo é um recurso
● Cada recurso tem um identificador único
● O servidor não mantém estado do cliente
  (stateless)
● Comunicação através de métodos
  padronizados (interface uniforme)
● Recursos tem representações
● Recursos devem ligar-se uns aos outros
Entendendo REST com
HTTP


● Identificação única: URI
● Stateless: HTTP é Stateless por padrão
● Interface Uniforme: Métodos HTTP (GET,
  POST...) e códigos de erro (404, 500...)
● Ligação de recursos: Uso de links
Segurança? Anexos?
Transações?
● HTTP já prevê tudo isso!
● O que não é previsto, alguém já fez com
  HTTP/REST e escreveu em algum lugar
● Não há necessidade de reinventar a roda
RESTful WEB Services
● WEB Services que seguem os príncipios REST
● Métodos idempotentes (PUT, DELETE) e seguros(GET)
● Livro "RESTful Serviços Web"
Um simples exemplo
  Agenda de contatos REST


  Objetivo          URI         Método       Recebe       Retorna     Código
                                 HTTP                                resposta
Criar          /contatos        POST     XML/JSON     -             201, 400
Listar Todos   /contatos        GET      -            XML/JSON 200
Recupera por /contatos/{id}     GET      -            XML/JSON 200, 404
ID
Atualizar      /contatos/{id}   PUT      XML/JSON     XML/JSON 200, 404,
                                                               400
Apagar         /contatos/{id}   DELETE   -            -             204, 404
Ok, já entendemos REST...




William, Por que você não fala de Java?
REST com Java
● Como fazer RESTful WEB Services com Java?
● JAX-RS é especificação Java para criação de WEB
    Service nesse estilo
●   Orientada a Pojos e anotações e foco no HTTP
●   JSR 311(JAX-RS 1) e JSR 339 (JAX-RS 2.0)
●   Incluída no JavaEE 6(versão 1.1)
●   Permite deploy em qualquer container WEB ou servidor
    de aplicação (Tomcat, Jetty, JBoss...)
●   Três principais implementações: RESTEasy, CXF,
    Jersey
Nosso exemplo traduzido
  em código



Interface usando as anotações JAX-RS para o exemplo Agenda de Contatos
URI Base para os métodos JAX-RS




                              Método HTTP




     Representações aceitas
Representações retornadas       Valor Default caso parâmetro não seja
                                informado




                      Parâmetros de "Query" ({uri}?param=value)




                             Parâmetro retirado da URI



                   Objeto será "parseado" automaticamente
JAX-RS 1 é completo?
● JAX-RS 1 é bom, mas não é perfeito, pois não cobre
    todas as necessidades de serviços REST
●   Está em desenvolvimento a versão 2.0 dessa
    especificação e o que está sendo trabalhado é:
       ■ API Cliente
       ■ Request Suspensas
       ■ Validação (integração com JSR X)
       ■ Interceptores e Handlers
       ■ Ligação de Recursos
       ■ JAX-RS 2.0 será parte do Java EE 7
API Cliente
● Criar um cliente é fácil, mas eles não vão ser JAX-RS
    "aware";
●   A API Client permite através do modelo de
    programação usando "builders"
●   Permite configuração por cada pedaço da URL
●   É possível também pegar a resposta diretamente em
    classes de modelo
●   Permite o registro de "providers"
●   A request pode ser assíncrona
Exemplo Cliente
Suspensão de Requests


Se seu método JAX-RS for fazer algo custoso,
que trave a thread da requisição, será possível
            suspender essa tarefa.
Exemplo
Filtros e Interceptores
● Para realizar registro das chamadas, segurança
    adicional, modificação do conteúdo...
●   É possível abortar a requisição usando abortWith
    (Response)
●   Há três os seguintes tipos de filtros ClientRequest,
    ClientResponse, ContainerRequest,
    ContainerResponse and PostContainerRequest;
●   Pode ser usado na request ou na response do método
    JAX-RS.
Exemplo Filtros
Interceptores


Semelhantes aos filtros temos os interceptores
 que podem ser invocados em volta da leitura
  (request) e escrita(response) do corpo da
              mensagem HTTP
Exemplo Interceptor
Outras informações

● Filtros e interceptores são organizados em corrente
● É possível definir prioridades sobre os filtros
● Você pode escolher o método a ser filtrado/interceptado
    usando anotações customizadas (Binding)
●   O Binding pode ser dinâmico também através da
    implementação da interface DynamicBinder
●   Filtros podem ser usados no lado cliente também
Validações
● Os parâmetros recebidos podem ser
  validados de acordo com a JSR Bean
  Validation
● Através de anotações é possível definir
  restrições para os parâmetros enviados ao
  servidor
● Você pode criar validações de acordo com
  seu sistema
O que mais pode ser feito?
● Suporte a MVC (pouco provável)
● Linking
● Melhorias na integração com CDI - JSR 330


        Você gostaria de algo mais?
    Participe das discussões da JSR 339
Dúvidas?


Obrigado!
@william_antonio

Contenu connexe

Tendances

Criando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPCriando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPRenan Gonçalves
 
WebService Restful em Java
WebService Restful em JavaWebService Restful em Java
WebService Restful em Javaalexmacedo
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves PagesAmanda Luz
 
Workshop Ruby on Rails - Code Girl (Programar meu Futuro), por Gislene Pereir...
Workshop Ruby on Rails - Code Girl (Programar meu Futuro), por Gislene Pereir...Workshop Ruby on Rails - Code Girl (Programar meu Futuro), por Gislene Pereir...
Workshop Ruby on Rails - Code Girl (Programar meu Futuro), por Gislene Pereir...Thoughtworks
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2Flávio Lisboa
 
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
 
Introdução ao JavaServer Faces
Introdução ao JavaServer FacesIntrodução ao JavaServer Faces
Introdução ao JavaServer FacesWillian Watanabe
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesRafael Ponte
 
Brutos Framework (Java WEB MVC)
Brutos Framework (Java WEB MVC)Brutos Framework (Java WEB MVC)
Brutos Framework (Java WEB MVC)Afonso Brandão
 
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
 
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
 

Tendances (20)

RESTful com json
RESTful com jsonRESTful com json
RESTful com json
 
Java wsdp
Java wsdpJava wsdp
Java wsdp
 
Rest
RestRest
Rest
 
Criando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPCriando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHP
 
WebService Restful em Java
WebService Restful em JavaWebService Restful em Java
WebService Restful em Java
 
Jboss Seam
Jboss SeamJboss Seam
Jboss Seam
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves Pages
 
Java Web 1 Introducao
Java Web 1 IntroducaoJava Web 1 Introducao
Java Web 1 Introducao
 
Workshop Ruby on Rails - Code Girl (Programar meu Futuro), por Gislene Pereir...
Workshop Ruby on Rails - Code Girl (Programar meu Futuro), por Gislene Pereir...Workshop Ruby on Rails - Code Girl (Programar meu Futuro), por Gislene Pereir...
Workshop Ruby on Rails - Code Girl (Programar meu Futuro), por Gislene Pereir...
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
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
 
Introdução ao JavaServer Faces
Introdução ao JavaServer FacesIntrodução ao JavaServer Faces
Introdução ao JavaServer Faces
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer Faces
 
Brutos Framework (Java WEB MVC)
Brutos Framework (Java WEB MVC)Brutos Framework (Java WEB MVC)
Brutos Framework (Java WEB MVC)
 
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
 
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
 
Aula parte 2 de JSF 2.2
Aula parte 2 de JSF 2.2Aula parte 2 de JSF 2.2
Aula parte 2 de JSF 2.2
 
ASP.NET - Web Services
ASP.NET - Web ServicesASP.NET - Web Services
ASP.NET - Web Services
 
Introdução a jsf
Introdução a jsfIntrodução a jsf
Introdução a jsf
 

Similaire à Novidades do JAX-RS 2.0

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
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupWagner Roberto dos Santos
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com JavajesuinoPower
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Desenvolvimento Web com JSF
Desenvolvimento Web com JSFDesenvolvimento Web com JSF
Desenvolvimento Web com JSFDalton Valadares
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Vinicius Pulgatti
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
JME Web Services API: um estudo de caso
JME Web Services API: um estudo de casoJME Web Services API: um estudo de caso
JME Web Services API: um estudo de casoLuiz Matos
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRJBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRElvis Rocha
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Helder da Rocha
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfBrunoAlbuquerque864673
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfBrunoAlbuquerque864673
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONAmbiente Livre
 

Similaire à Novidades do JAX-RS 2.0 (20)

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
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
Palestra Sobre REST
Palestra Sobre RESTPalestra Sobre REST
Palestra Sobre REST
 
Web service
Web serviceWeb service
Web service
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com Java
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Desenvolvimento Web com JSF
Desenvolvimento Web com JSFDesenvolvimento Web com JSF
Desenvolvimento Web com JSF
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
 
GUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EEGUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EE
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
JME Web Services API: um estudo de caso
JME Web Services API: um estudo de casoJME Web Services API: um estudo de caso
JME Web Services API: um estudo de caso
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
 
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRJBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
 
Web Services
Web ServicesWeb Services
Web Services
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 

Plus de jesuinoPower

Básico sobre Debugging com Java
Básico sobre Debugging com JavaBásico sobre Debugging com Java
Básico sobre Debugging com JavajesuinoPower
 
Introdução ao LiveOak
Introdução ao LiveOakIntrodução ao LiveOak
Introdução ao LiveOakjesuinoPower
 
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
 
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
 
JavaFX: Desktop para desenvolvedores WEB
JavaFX: Desktop para desenvolvedores WEBJavaFX: Desktop para desenvolvedores WEB
JavaFX: Desktop para desenvolvedores WEBjesuinoPower
 
JavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasJavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasjesuinoPower
 
Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parecejesuinoPower
 
JavaFX: A nova biblioteca gráfica da plataforma Java
JavaFX: A nova biblioteca gráfica da plataforma JavaJavaFX: A nova biblioteca gráfica da plataforma Java
JavaFX: A nova biblioteca gráfica da plataforma JavajesuinoPower
 
Desenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFXDesenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFXjesuinoPower
 
JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012jesuinoPower
 
Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFXjesuinoPower
 
Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visagejesuinoPower
 

Plus de jesuinoPower (13)

Básico sobre Debugging com Java
Básico sobre Debugging com JavaBásico sobre Debugging com Java
Básico sobre Debugging com Java
 
Introdução ao LiveOak
Introdução ao LiveOakIntrodução ao LiveOak
Introdução ao LiveOak
 
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
 
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
 
JavaFX: Desktop para desenvolvedores WEB
JavaFX: Desktop para desenvolvedores WEBJavaFX: Desktop para desenvolvedores WEB
JavaFX: Desktop para desenvolvedores WEB
 
JavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasJavaFX 8, Collections e Lambdas
JavaFX 8, Collections e Lambdas
 
Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parece
 
JavaFX: A nova biblioteca gráfica da plataforma Java
JavaFX: A nova biblioteca gráfica da plataforma JavaJavaFX: A nova biblioteca gráfica da plataforma Java
JavaFX: A nova biblioteca gráfica da plataforma Java
 
Desenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFXDesenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFX
 
JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012
 
JavaFX 2
JavaFX 2JavaFX 2
JavaFX 2
 
Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
 
Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visage
 

Novidades do JAX-RS 2.0

  • 1. Novidades do JAX-RS 2.0 Web Services RESTful com Java
  • 2. Quem é William ● Usuário "Jesuino" do JavaFree e do GUJ ● Formado na FATEC de São José dos Campos ● Trabalhou com ABAP, BI e C. Atualmente Analista de Suporte na Red Hat ● Comunidade JavaFX ● Trabalha com JBoss e Portais ● Um dos Organizadores do JUG Vale
  • 3. Agenda ● Análise do problema ● Web Services tradicionais ● REST ● RESTful WEB Services ● REST e Java ● JAX-RS 1.0 ● Novidades do JAX-RS 2.0
  • 4. O problema Como integrar sistemas implementados com tecnologias variadas em ambientes distintos?
  • 5. Padrões complexos e dependência de vendedores A II B O RM O R P I C DC OM C E D Primeiras soluções eram complicadas
  • 6. Web Services Tradicionais Basicamente troca de informação em XML entre o servidor e o cliente SOAP ao resgate ● Padrões abertos ● Independência de plataforma e linguagem de programação ● Total desacoplamento entre ambas partes
  • 7. Uma URL, um método HTTP, vários XMLs http://www.w3schools.com/soap/soap_example.asp
  • 8. Autenticação? Autorização? Anexos? SSO? Arquitetura? Encriptação? Transações? Necessidades foram surgindo com o uso
  • 9. Infinitos padrões ● WS-* ○ WS-Security ○ WS-Transaction ○ WS-Transfer ○ WS-Policy ○ WS-Signature ○ WS-Encryption ○ WS-Trust ○ WS-Federation ○ WS-Discovery ○ WS-Eventing ○ ... ● Arquiteturas complexa ● Centenas de ferramentas
  • 10. Complicou de novo. E agora? REST your SOAP, and don’t worry, be happy Frase retirada desse artigo: http://demystifyit.com/hello-world/
  • 11. REST ● Estilo Arquitetural ● Tese PHD de Roy Fielding ● "Engenharia reversa do funcionamento da WEB" ● Orientada a recursos
  • 12. Principais características ● Tudo é um recurso ● Cada recurso tem um identificador único ● O servidor não mantém estado do cliente (stateless) ● Comunicação através de métodos padronizados (interface uniforme) ● Recursos tem representações ● Recursos devem ligar-se uns aos outros
  • 13. Entendendo REST com HTTP ● Identificação única: URI ● Stateless: HTTP é Stateless por padrão ● Interface Uniforme: Métodos HTTP (GET, POST...) e códigos de erro (404, 500...) ● Ligação de recursos: Uso de links
  • 14. Segurança? Anexos? Transações? ● HTTP já prevê tudo isso! ● O que não é previsto, alguém já fez com HTTP/REST e escreveu em algum lugar ● Não há necessidade de reinventar a roda
  • 15. RESTful WEB Services ● WEB Services que seguem os príncipios REST ● Métodos idempotentes (PUT, DELETE) e seguros(GET) ● Livro "RESTful Serviços Web"
  • 16. Um simples exemplo Agenda de contatos REST Objetivo URI Método Recebe Retorna Código HTTP resposta Criar /contatos POST XML/JSON - 201, 400 Listar Todos /contatos GET - XML/JSON 200 Recupera por /contatos/{id} GET - XML/JSON 200, 404 ID Atualizar /contatos/{id} PUT XML/JSON XML/JSON 200, 404, 400 Apagar /contatos/{id} DELETE - - 204, 404
  • 17. Ok, já entendemos REST... William, Por que você não fala de Java?
  • 18. REST com Java ● Como fazer RESTful WEB Services com Java? ● JAX-RS é especificação Java para criação de WEB Service nesse estilo ● Orientada a Pojos e anotações e foco no HTTP ● JSR 311(JAX-RS 1) e JSR 339 (JAX-RS 2.0) ● Incluída no JavaEE 6(versão 1.1) ● Permite deploy em qualquer container WEB ou servidor de aplicação (Tomcat, Jetty, JBoss...) ● Três principais implementações: RESTEasy, CXF, Jersey
  • 19. Nosso exemplo traduzido em código Interface usando as anotações JAX-RS para o exemplo Agenda de Contatos
  • 20.
  • 21. URI Base para os métodos JAX-RS Método HTTP Representações aceitas
  • 22. Representações retornadas Valor Default caso parâmetro não seja informado Parâmetros de "Query" ({uri}?param=value) Parâmetro retirado da URI Objeto será "parseado" automaticamente
  • 23. JAX-RS 1 é completo? ● JAX-RS 1 é bom, mas não é perfeito, pois não cobre todas as necessidades de serviços REST ● Está em desenvolvimento a versão 2.0 dessa especificação e o que está sendo trabalhado é: ■ API Cliente ■ Request Suspensas ■ Validação (integração com JSR X) ■ Interceptores e Handlers ■ Ligação de Recursos ■ JAX-RS 2.0 será parte do Java EE 7
  • 24. API Cliente ● Criar um cliente é fácil, mas eles não vão ser JAX-RS "aware"; ● A API Client permite através do modelo de programação usando "builders" ● Permite configuração por cada pedaço da URL ● É possível também pegar a resposta diretamente em classes de modelo ● Permite o registro de "providers" ● A request pode ser assíncrona
  • 26. Suspensão de Requests Se seu método JAX-RS for fazer algo custoso, que trave a thread da requisição, será possível suspender essa tarefa.
  • 28. Filtros e Interceptores ● Para realizar registro das chamadas, segurança adicional, modificação do conteúdo... ● É possível abortar a requisição usando abortWith (Response) ● Há três os seguintes tipos de filtros ClientRequest, ClientResponse, ContainerRequest, ContainerResponse and PostContainerRequest; ● Pode ser usado na request ou na response do método JAX-RS.
  • 30. Interceptores Semelhantes aos filtros temos os interceptores que podem ser invocados em volta da leitura (request) e escrita(response) do corpo da mensagem HTTP
  • 32. Outras informações ● Filtros e interceptores são organizados em corrente ● É possível definir prioridades sobre os filtros ● Você pode escolher o método a ser filtrado/interceptado usando anotações customizadas (Binding) ● O Binding pode ser dinâmico também através da implementação da interface DynamicBinder ● Filtros podem ser usados no lado cliente também
  • 33. Validações ● Os parâmetros recebidos podem ser validados de acordo com a JSR Bean Validation ● Através de anotações é possível definir restrições para os parâmetros enviados ao servidor ● Você pode criar validações de acordo com seu sistema
  • 34.
  • 35. O que mais pode ser feito? ● Suporte a MVC (pouco provável) ● Linking ● Melhorias na integração com CDI - JSR 330 Você gostaria de algo mais? Participe das discussões da JSR 339