Novidades do JAX-RS 2.0
Post on 24-Jun-2015
987 Views
Preview:
DESCRIPTION
Transcript
Novidades do JAX-RS 2.0Web 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?
Primeiras soluções eram complicadas
RMI CORBA IIOP
DCOM
Padrões complexos e dependência de vendedores
DCE
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
http://www.w3schools.com/soap/soap_example.asp
Uma URL, um método HTTP, vários XMLs
Necessidades foram surgindo com o uso
Autorização?
SSO?
Arquitetura? Encriptação?
Autenticação?
Transações?
Anexos?
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
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
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
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
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
top related