novidades do jax-rs 2.0

36
Novidades do JAX-RS 2.0 Web Services RESTful com Java

Upload: jesuinopower

Post on 24-Jun-2015

989 views

Category:

Documents


1 download

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

Novidades do JAX-RS 2.0Web Services RESTful com Java

Page 2: Novidades do JAX-RS 2.0

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

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

O problema

Como integrar sistemas implementados com tecnologias variadas em ambientes

distintos?

Page 5: Novidades do JAX-RS 2.0

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

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

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

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

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

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

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

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

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

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

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

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

Ok, já entendemos REST...

William, Por que você não fala de Java?

Page 18: Novidades do JAX-RS 2.0

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

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
Page 21: Novidades do JAX-RS 2.0

URI Base para os métodos JAX-RS

Método HTTP

Representações aceitas

Page 22: Novidades do JAX-RS 2.0

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

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

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

Exemplo Cliente

Page 26: Novidades do JAX-RS 2.0

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

Exemplo

Page 28: Novidades do JAX-RS 2.0

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

Exemplo Filtros

Page 30: Novidades do JAX-RS 2.0

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

Exemplo Interceptor

Page 32: Novidades do JAX-RS 2.0

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

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
Page 35: Novidades do JAX-RS 2.0

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

Dúvidas?

Obrigado!@william_antonio