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

Novidades do JAX-RS 2.0

  • 1.
    Novidades do JAX-RS 2.0 WebServices 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 integrarsistemas implementados com tecnologias variadas em ambientes distintos?
  • 5.
    Padrões complexos edependê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, ummé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? ● HTTPjá 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á entendemosREST... 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
  • 21.
    URI Base paraos 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 ● Criarum 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
  • 25.
  • 26.
    Suspensão de Requests Seseu método JAX-RS for fazer algo custoso, que trave a thread da requisição, será possível suspender essa tarefa.
  • 27.
  • 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.
  • 29.
  • 30.
    Interceptores Semelhantes aos filtrostemos os interceptores que podem ser invocados em volta da leitura (request) e escrita(response) do corpo da mensagem HTTP
  • 31.
  • 32.
    Outras informações ● Filtrose 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âmetrosrecebidos 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
  • 35.
    O que maispode 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
  • 36.