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
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
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
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
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