novidades do jax-rs 2.0
DESCRIPTION
Apresentação sobre JAX-RS 2.0 para o TDC 2012 - Edição de Florianópolis.TRANSCRIPT
![Page 1: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/1.jpg)
Novidades do JAX-RS 2.0Web Services RESTful com Java
![Page 2: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/2.jpg)
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
![Page 3: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/3.jpg)
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
![Page 4: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/4.jpg)
O problema
Como integrar sistemas implementados com tecnologias variadas em ambientes
distintos?
![Page 5: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/5.jpg)
Primeiras soluções eram complicadas
RMI CORBA IIOP
DCOM
Padrões complexos e dependência de vendedores
DCE
![Page 6: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/6.jpg)
Web Services TradicionaisBasicamente troca de informação em XML
entre o servidor e o cliente
● Padrões abertos
● Independência de plataforma e linguagem de programação
● Total desacoplamento entre ambas partes
SOAP ao resgate
![Page 7: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/7.jpg)
http://www.w3schools.com/soap/soap_example.asp
Uma URL, um método HTTP, vários XMLs
![Page 8: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/8.jpg)
Necessidades foram surgindo com o uso
Autorização?
SSO?
Arquitetura? Encriptação?
Autenticação?
Transações?
Anexos?
![Page 9: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/9.jpg)
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
![Page 10: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/10.jpg)
Complicou de novo. E agora?
REST your SOAP, and don’t worry, be happy
Frase retirada desse artigo: http://demystifyit.com/hello-world/
![Page 11: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/11.jpg)
REST● Estilo Arquitetural
● Tese PHD de Roy Fielding
● "Engenharia reversa do funcionamento da WEB"
● Orientada a recursos
![Page 12: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/12.jpg)
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
![Page 13: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/13.jpg)
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
![Page 14: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/14.jpg)
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
![Page 15: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/15.jpg)
RESTful WEB Services● WEB Services que seguem os príncipios REST● Métodos idempotentes (PUT, DELETE) e seguros(GET)● Livro "RESTful Serviços Web"
![Page 16: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/16.jpg)
Um simples exemplo
Objetivo URI Método HTTP
Recebe Retorna Código resposta
Criar /contatos POST XML/JSON - 201, 400
Listar Todos /contatos GET - XML/JSON 200
Recupera por ID
/contatos/{id} GET - XML/JSON 200, 404
Atualizar /contatos/{id} PUT XML/JSON XML/JSON 200, 404, 400
Apagar /contatos/{id} DELETE - - 204, 404
Agenda de contatos REST
![Page 17: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/17.jpg)
Ok, já entendemos REST...
William, Por que você não fala de Java?
![Page 18: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/18.jpg)
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
![Page 19: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/19.jpg)
Nosso exemplo traduzido em código
Interface usando as anotações JAX-RS para o exemplo Agenda de Contatos
![Page 20: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/20.jpg)
![Page 21: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/21.jpg)
URI Base para os métodos JAX-RS
Método HTTP
Representações aceitas
![Page 22: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/22.jpg)
Valor Default caso parâmetro não seja informado
Representações retornadas
Parâmetros de "Query" ({uri}?param=value)
Parâmetro retirado da URI
Objeto será "parseado" automaticamente
![Page 23: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/23.jpg)
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
![Page 24: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/24.jpg)
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
![Page 25: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/25.jpg)
Exemplo Cliente
![Page 26: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/26.jpg)
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.
![Page 27: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/27.jpg)
Exemplo
![Page 28: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/28.jpg)
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.
![Page 29: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/29.jpg)
Exemplo Filtros
![Page 30: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/30.jpg)
Interceptores
Semelhantes aos filtros temos os interceptores que podem ser invocados em volta da leitura
(request) e escrita(response) do corpo da mensagem HTTP
![Page 31: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/31.jpg)
Exemplo Interceptor
![Page 32: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/32.jpg)
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
![Page 33: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/33.jpg)
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
![Page 34: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/34.jpg)
![Page 35: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/35.jpg)
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
![Page 36: Novidades do JAX-RS 2.0](https://reader033.vdocuments.mx/reader033/viewer/2022052507/558a1938d8b42af0378b46a6/html5/thumbnails/36.jpg)
Dúvidas?
Obrigado!@william_antonio