JAX-RS 2.0
As novidades do padrão para desenvolvimento REST
Fabio Velloso
Wednesday, September 18, 13
Fabio Velloso
• Bacharel em Ciência da Computação pela Universidade Federal
de São Carlos - UFSCar
• Fundador do SouJava
•...
Agenda
• REST
• Conceitos
• JAX-RS
• Conceitos e principais anotações
• JAX-RS 2.0
• Novidades
Wednesday, September 18, 13
Agenda
• REST
• Conceitos
• JAX-RS
• Conceitos e principais anotações
• JAX-RS 2.0
• Novidades
Wednesday, September 18, 13
REST
• Estilo de arquitetura e suas restrições
• Recursos identificados unicamente por uma URI
• Interface uniforme (GET, P...
Aplicação CRUD com REST
• Consultar o livro por seu ID
GET http://www.soujava.org.br/books/123
• Adicionar um livro
POST h...
Aplicação CRUD com REST
Wednesday, September 18, 13
Aplicação CRUD com REST
<book>
<id>123</id>
<name>Java: The Good Parts </name>
<author>Jim Waldo</author>
<isbn>0596803737...
Agenda
• REST
• Conceitos
• JAX-RS
• Conceitos e principais anotações
• JAX-RS 2.0
• Novidades
Wednesday, September 18, 13
Java API for RESTful Web Services - JSR 331
• Suporte a RESTful em Java
• API padronizada
• Programação declarativa
• Anot...
Java API for RESTful Web Services - JSR 331
Wednesday, September 18, 13
Java API for RESTful Web Services - JSR 331
Recurso
Recurso
Wednesday, September 18, 13
Java API for RESTful Web Services - JSR 331
Recurso
Recurso
Método HTTP
Wednesday, September 18, 13
Java API for RESTful Web Services - JSR 331
Recurso
Recurso
Método HTTP
Serialização
Serialização
Wednesday, September 18,...
Java API for RESTful Web Services - JSR 331
• @Path, @PathParam, @Produces, @Consumes
@HeaderParam, @QueryParam, @MatrixPa...
Agenda
• REST
• Conceitos
• JAX-RS
• Conceitos e principais anotações
• JAX-RS 2.0
• Novidades
Wednesday, September 18, 13
JAX-RS 2.0 Java API for RESTful Web Services
• JSR 339
• Client API
• Validação
• Filters e Interceptors
• Processamento a...
Client API
• Objetivos:
• Encapsular os conceitos e principais restrições da
arquitetura REST como artefatos Java em clien...
Client API
• Padronização da API client
• Portável entre implementações
• Consumo de Web Services expostos sobre HTTP
• Po...
Client API
• Classes e interfaces mais importantes
• Client
• Usada para criar e acessar “web resources” e
configurar propr...
Client API
• Client API com todos objetos
• Fluent API
Wednesday, September 18, 13
Client API
• Invocation
• Requisição preparada e pronta a ser executada
• Interface genérica (command) com clara separação...
Client API
• Invocation
Invocation inv1 = client.target("http://examples.org/atm/balance")
.queryParam("card", "1111222233...
Client API
• Setar parâmetros do request
• “fluent” api
• Form
Wednesday, September 18, 13
Client API
• Setar parâmetros do request
• “fluent” api
• Form
Objeto JAXB
Wednesday, September 18, 13
Validation
• Verifica o conteúdo e formação de um ou mais campos
• Utiliza Beans Validation
• Suporte por anotações de vali...
Validation
• @NotNull
• Varifica se o campo é nulo
• se nulo javax.validation.ValidationException
Wednesday, September 18, ...
Validation
• @NotNull
• Varifica se o campo é nulo
• se nulo javax.validation.ValidationException
Wednesday, September 18, ...
Validation
• Aplicável a campos
@Path("/")
public class UserResource {
@NotNull
@FormParam("userName")
private String user...
Validation
• Aplicável a recursos
@Path("/createUser")
@PhoneRequired
public class CreateUserResource {
@FormParam("homePh...
Validation
• @Pattern com expressões regulares
• javax.validation.constraints.Pattern
• Erro - HTTP Status 400 - Bad Reque...
Validation
• @Valid
• valida no método classes que tem “constraints”
public class Book {
private int id;
@NotNull
private ...
Validation
• Custom Validation
• Validação definida pelo desenvolvedor
• Implementar a interface ConstraintValidator
Wednes...
Filters
• Utilizados para modificar requests e responses
• Adicionar e/ou alterar headers
• Filtros podem ser server side e...
ContainerResponseFilters
• Utilizado para modificar response
• alterando Headers
• Classe tem de implementar ContainerRespo...
ContainerResponseFilters
• Filtros por padrão são chamados de globais
• e aplicados a todos os recursos da aplicação
• Ano...
@NameBinding - passos
• Definir a Interface e anotação
• Definir e anotar a classe com @Provider e @<nome>
Wednesday, Septem...
@NameBinding - passos
• Anotar os recursos para o filtro
• Todos os flitros são executados como pos matching
• Executados ap...
ContainerRequestFilters
• Similares aos ResponseFilters
• Possibilitam alteram os parâmetros do request
• Não possuem parâ...
ContainerRequestFilters
• @PreMatching
• Altera todos os métodos PUT para POST
• Assume que o código a ser executado é o m...
Interceptors
• Manipular input/output streams
• Podem ser utilizados no cliente ou server
• Dois tipos de Interceptors
• R...
Interceptors
Wednesday, September 18, 13
Asynchronous Processing
• Possibilita o processamento multithread no servidor,
aumentando o seu throughput
• Libera a thre...
Asynchronous Processing
Wednesday, September 18, 13
Asynchronous Processing
@Suspended
método assíncrono
Wednesday, September 18, 13
Asynchronous Processing
@Suspended
método assíncrono
Nova thread
Wednesday, September 18, 13
Asynchronous Processing
@Suspended
método assíncrono
Nova thread
retorna void
Wednesday, September 18, 13
Asynchronous Processing
@Suspended
método assíncrono
Nova thread
Executa na
nova thread
retorna void
Wednesday, September ...
Asynchronous Processing
@Suspended
método assíncrono
Nova thread
Executa na
nova thread
retorna void
retorna o
resultado
W...
Asynchronous Processing - timeout
Wednesday, September 18, 13
Asynchronous Processing - timeout
Cria
TimeoutHandler
Wednesday, September 18, 13
Asynchronous Processing - timeout
Define
mensagem de
erro
Cria
TimeoutHandler
Wednesday, September 18, 13
Asynchronous Processing - timeout
Define
mensagem de
erro
Cria
TimeoutHandler
Lança uma
ServiceUnavailable
Exception
Mapead...
Asynchronous Processing - timeout
Define timeout e
unidade
Define
mensagem de
erro
Cria
TimeoutHandler
Lança uma
ServiceUnav...
Asynchronous Processing
• Cliente assíncrono
• Arquiteturas fracamente acopladas
Wednesday, September 18, 13
Asynchronous Processing
• Cliente assíncrono
• Arquiteturas fracamente acopladas
Define a
execução
assíncrona
Wednesday, Se...
Asynchronous Processing
• Cliente assíncrono
• Arquiteturas fracamente acopladas
Define a
execução
assíncrona
Representa o
...
Asynchronous Processing
• Cliente assíncrono
• Arquiteturas fracamente acopladas
Define a
execução
assíncrona
Representa o
...
JAX-RS 2.0
• Novas funcionalidades para “build” de URIs
• Possibilida de uso de “templates” na classe UriBuilder
• método ...
JAX-RS 2.0
• Classe Link
• Implementa RFC 5988 (Web Link)
• Inserir metadados em mensagens HTTP
• Link é serializado em um...
Richardson Maturity Model
• Nível 0
• POX
• URI única
• Nível 1
• URIs, verbo único
• Nível 2
• CRUD
• URIs, verbos
• Níve...
Hypermedia
• Links para declarar próximos passos
• Links para descrever transições de estado
• Navegação altera estado do ...
JAX-RS 2.0
• Link
• adicionando links a um objeto Response
• Consumindo em um cliente
Wednesday, September 18, 13
Link: <http://.../orders/1/review>;rel=review;op=POST
Link: <http://.../orders/1/cancel>;rel=cancel;op=POST
<order>
<id>1<...
Wednesday, September 18, 13
OBRIGADO !!!!!
Wednesday, September 18, 13
OBRIGADO !!!!!
  fabio@soujava.org.br
@fabiovelloso
Wednesday, September 18, 13
OBRIGADO !!!!!
  fabio@soujava.org.br
@fabiovelloso
facebook.com/soujava
@soujava
soujava.org.br
Wednesday, September 18, ...
Próximos SlideShares
Carregando em…5
×

JAX-RS 2.0

738 visualizações

Publicada em

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
738
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
23
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

JAX-RS 2.0

  1. 1. JAX-RS 2.0 As novidades do padrão para desenvolvimento REST Fabio Velloso Wednesday, September 18, 13
  2. 2. Fabio Velloso • Bacharel em Ciência da Computação pela Universidade Federal de São Carlos - UFSCar • Fundador do SouJava • Desenvolvendo projetos com tecnologia Java desde 96 • Professor de SOA e Web Services do curso de Pós-Graduação "Lato-Sensu" em Desenvolvimento de Software para Web da UFSCar • Gerente de Arquitetura da Telefonica | VIVO • Atualmente desenvolve projetos pessoais com Big Data, Cloud, Design Thinking, Service Design e Economia Criativa Wednesday, September 18, 13
  3. 3. Agenda • REST • Conceitos • JAX-RS • Conceitos e principais anotações • JAX-RS 2.0 • Novidades Wednesday, September 18, 13
  4. 4. Agenda • REST • Conceitos • JAX-RS • Conceitos e principais anotações • JAX-RS 2.0 • Novidades Wednesday, September 18, 13
  5. 5. REST • Estilo de arquitetura e suas restrições • Recursos identificados unicamente por uma URI • Interface uniforme (GET, POST, PUT, DELETE) • Componentes REST manipulam recursos alterando sua representação • Mensagens auto-descritivas e sem estado ou “stateless” • Informações podem estar em cache • Multiplas representações • Hypermedia Wednesday, September 18, 13
  6. 6. Aplicação CRUD com REST • Consultar o livro por seu ID GET http://www.soujava.org.br/books/123 • Adicionar um livro POST http://www.soujava.org.br/books • Alterar um livro PUT http://www.soujava.org.br/books • Remover o livro pelo ID DELETE http://www.soujava.org.br/books/123 Wednesday, September 18, 13
  7. 7. Aplicação CRUD com REST Wednesday, September 18, 13
  8. 8. Aplicação CRUD com REST <book> <id>123</id> <name>Java: The Good Parts </name> <author>Jim Waldo</author> <isbn>0596803737</isbn> <isbn13>978-0596803735</isbn13> </book> Wednesday, September 18, 13
  9. 9. Agenda • REST • Conceitos • JAX-RS • Conceitos e principais anotações • JAX-RS 2.0 • Novidades Wednesday, September 18, 13
  10. 10. Java API for RESTful Web Services - JSR 331 • Suporte a RESTful em Java • API padronizada • Programação declarativa • Anotações • POJO • Integrado ao JEE6 (JSR 313) Wednesday, September 18, 13
  11. 11. Java API for RESTful Web Services - JSR 331 Wednesday, September 18, 13
  12. 12. Java API for RESTful Web Services - JSR 331 Recurso Recurso Wednesday, September 18, 13
  13. 13. Java API for RESTful Web Services - JSR 331 Recurso Recurso Método HTTP Wednesday, September 18, 13
  14. 14. Java API for RESTful Web Services - JSR 331 Recurso Recurso Método HTTP Serialização Serialização Wednesday, September 18, 13
  15. 15. Java API for RESTful Web Services - JSR 331 • @Path, @PathParam, @Produces, @Consumes @HeaderParam, @QueryParam, @MatrixParam @NewCookie Recurso Recurso Método HTTP Serialização Serialização Wednesday, September 18, 13
  16. 16. Agenda • REST • Conceitos • JAX-RS • Conceitos e principais anotações • JAX-RS 2.0 • Novidades Wednesday, September 18, 13
  17. 17. JAX-RS 2.0 Java API for RESTful Web Services • JSR 339 • Client API • Validação • Filters e Interceptors • Processamento assíncrono • Melhorias • ResourceTemplate • Link JAX-RS 2.0JCP JAVA EXTRA!! Wednesday, September 18, 13
  18. 18. Client API • Objetivos: • Encapsular os conceitos e principais restrições da arquitetura REST como artefatos Java em clientes • Facilitar o consumo de RESTfull Web Services • como JAX-RS facilitou desenvolvimento no servidor • Compartilhar conceitos comuns entre client e server JAX-RS Wednesday, September 18, 13
  19. 19. Client API • Padronização da API client • Portável entre implementações • Consumo de Web Services expostos sobre HTTP • Pode acessar serviços REST construídos em outras linguagens e frameworks • ou acessar extensões como Web Dav • Setar parâmetros e configurações • Form, headers, SSL Wednesday, September 18, 13
  20. 20. Client API • Classes e interfaces mais importantes • Client • Usada para criar e acessar “web resources” e configurar propriedades de conexões e requisições • ClientBuilder.newClient(); • WebTarget • encapsula um Web resource • podendo criar e envia-lo requests e processar seus responses • .get() , .post() , .put() , .delete() Wednesday, September 18, 13
  21. 21. Client API • Client API com todos objetos • Fluent API Wednesday, September 18, 13
  22. 22. Client API • Invocation • Requisição preparada e pronta a ser executada • Interface genérica (command) com clara separação de conceitos: • Creator - cria a requisição • Submitter - envia a requisição • Não precisa conhecer como o “Invocation” é preparado e sim quando e como ele é executado • Forma síncrona • Forma assíncrona Wednesday, September 18, 13
  23. 23. Client API • Invocation Invocation inv1 = client.target("http://examples.org/atm/balance") .queryParam("card", "111122223333") .queryParam("pin", "9876").request("text/plain").buildGet(); Invocation inv2 = client.target("http://examples.org/atm/withdrawal") .queryParam("card", "111122223333").queryParam("pin", "9876") .request().buildPost(text("50.0"))); Collection<Invocation> invs = Arrays.asList(inv1, inv2); Collection<Response> ress = Collections.transform(invs, new F<Invocation, Response>() { @Override public Response apply(Invocation inv) { return inv.invoke(); } }); Wednesday, September 18, 13
  24. 24. Client API • Setar parâmetros do request • “fluent” api • Form Wednesday, September 18, 13
  25. 25. Client API • Setar parâmetros do request • “fluent” api • Form Objeto JAXB Wednesday, September 18, 13
  26. 26. Validation • Verifica o conteúdo e formação de um ou mais campos • Utiliza Beans Validation • Suporte por anotações de validação em: • Campos e propriedades • Métodos (response entities) • Resource classes • Parâmetros (inclusive request entity) • lança javax.validation.ValidationException Wednesday, September 18, 13
  27. 27. Validation • @NotNull • Varifica se o campo é nulo • se nulo javax.validation.ValidationException Wednesday, September 18, 13
  28. 28. Validation • @NotNull • Varifica se o campo é nulo • se nulo javax.validation.ValidationException Wednesday, September 18, 13
  29. 29. Validation • Aplicável a campos @Path("/") public class UserResource { @NotNull @FormParam("userName") private String userName; • Aplicável a métodos @NotNull @FormParam("userName") public void setUserName(String userName) { this.username = userName; } Wednesday, September 18, 13
  30. 30. Validation • Aplicável a recursos @Path("/createUser") @PhoneRequired public class CreateUserResource { @FormParam("homePhone") private Phone homePhone; @FormParam("mobilePhone") private Phone mobilePhone; } Wednesday, September 18, 13
  31. 31. Validation • @Pattern com expressões regulares • javax.validation.constraints.Pattern • Erro - HTTP Status 400 - Bad Request Wednesday, September 18, 13
  32. 32. Validation • @Valid • valida no método classes que tem “constraints” public class Book { private int id; @NotNull private String name; ...} @POST @Consumes(MediaType.APPLICATION_XML) public void createBook(@Valid BookConstraints book) { //Executa criacão } • Erro na validação (ValidationException) retorna • HTTP 400 ou HTTP 500 Wednesday, September 18, 13
  33. 33. Validation • Custom Validation • Validação definida pelo desenvolvedor • Implementar a interface ConstraintValidator Wednesday, September 18, 13
  34. 34. Filters • Utilizados para modificar requests e responses • Adicionar e/ou alterar headers • Filtros podem ser server side e/ou client side • ContainerRequestFilter • ContainerResponseFilter • ClientResponseFilter • ClientRequestFilter Wednesday, September 18, 13
  35. 35. ContainerResponseFilters • Utilizado para modificar response • alterando Headers • Classe tem de implementar ContainerResponseFilter • Filtros são aplicados globalmente em todos recursos da aplicação por padrão Wednesday, September 18, 13
  36. 36. ContainerResponseFilters • Filtros por padrão são chamados de globais • e aplicados a todos os recursos da aplicação • Anotação @NameBinding • Altera o comportamento padrão • Especifica a quais recursos o filtro é aplicado • Filtros com essa característica são chamados name-bound Wednesday, September 18, 13
  37. 37. @NameBinding - passos • Definir a Interface e anotação • Definir e anotar a classe com @Provider e @<nome> Wednesday, September 18, 13
  38. 38. @NameBinding - passos • Anotar os recursos para o filtro • Todos os flitros são executados como pos matching • Executados após selecionar qual método deve ser acessado para cada request • Pode ser alterado usando a anotação @PreMatching • são executados antes do iniciar o “matching” Wednesday, September 18, 13
  39. 39. ContainerRequestFilters • Similares aos ResponseFilters • Possibilitam alteram os parâmetros do request • Não possuem parâmetro ContainerResponseContext • RequestFilters são executados como post-matching • executados após o recurso a ser executado ser “encontrado” • GET, POST, PUT ou DELETE • Pode-se alterar utilizando a anotação @PreMatching • executa o filtro antes do “matching” do método Wednesday, September 18, 13
  40. 40. ContainerRequestFilters • @PreMatching • Altera todos os métodos PUT para POST • Assume que o código a ser executado é o mesmo Wednesday, September 18, 13
  41. 41. Interceptors • Manipular input/output streams • Podem ser utilizados no cliente ou server • Dois tipos de Interceptors • ReaderInterceptors (manipulam stream de entrada) • WriterInterceptors (manipulam streams de saída) • Interceptors são globais (aplicados a todos os recursos) • Anotação @NameBinding (name-bound) • Especifica a quais recursos o filtro é aplicado Wednesday, September 18, 13
  42. 42. Interceptors Wednesday, September 18, 13
  43. 43. Asynchronous Processing • Possibilita o processamento multithread no servidor, aumentando o seu throughput • Libera a thread do servidor para executar outras tarefas • Processamento executa em outra thread ou espera em uma fila até execução • Quando recebe a resposta envia para o client • @Suspended indica que o método será executado de maneira assíncrona • Possível setar timeout, portanto faça! Wednesday, September 18, 13
  44. 44. Asynchronous Processing Wednesday, September 18, 13
  45. 45. Asynchronous Processing @Suspended método assíncrono Wednesday, September 18, 13
  46. 46. Asynchronous Processing @Suspended método assíncrono Nova thread Wednesday, September 18, 13
  47. 47. Asynchronous Processing @Suspended método assíncrono Nova thread retorna void Wednesday, September 18, 13
  48. 48. Asynchronous Processing @Suspended método assíncrono Nova thread Executa na nova thread retorna void Wednesday, September 18, 13
  49. 49. Asynchronous Processing @Suspended método assíncrono Nova thread Executa na nova thread retorna void retorna o resultado Wednesday, September 18, 13
  50. 50. Asynchronous Processing - timeout Wednesday, September 18, 13
  51. 51. Asynchronous Processing - timeout Cria TimeoutHandler Wednesday, September 18, 13
  52. 52. Asynchronous Processing - timeout Define mensagem de erro Cria TimeoutHandler Wednesday, September 18, 13
  53. 53. Asynchronous Processing - timeout Define mensagem de erro Cria TimeoutHandler Lança uma ServiceUnavailable Exception Mapeada em 503, "Service Unavailable" HTTP error response Wednesday, September 18, 13
  54. 54. Asynchronous Processing - timeout Define timeout e unidade Define mensagem de erro Cria TimeoutHandler Lança uma ServiceUnavailable Exception Mapeada em 503, "Service Unavailable" HTTP error response Wednesday, September 18, 13
  55. 55. Asynchronous Processing • Cliente assíncrono • Arquiteturas fracamente acopladas Wednesday, September 18, 13
  56. 56. Asynchronous Processing • Cliente assíncrono • Arquiteturas fracamente acopladas Define a execução assíncrona Wednesday, September 18, 13
  57. 57. Asynchronous Processing • Cliente assíncrono • Arquiteturas fracamente acopladas Define a execução assíncrona Representa o resultado de processamento assíncrono Wednesday, September 18, 13
  58. 58. Asynchronous Processing • Cliente assíncrono • Arquiteturas fracamente acopladas Define a execução assíncrona Representa o resultado de processamento assíncrono Wednesday, September 18, 13
  59. 59. JAX-RS 2.0 • Novas funcionalidades para “build” de URIs • Possibilida de uso de “templates” na classe UriBuilder • método resolveTemplate() • Resultado: • http://www.thedevelopersconference.com.br/2013? trilha=JavaEE Wednesday, September 18, 13
  60. 60. JAX-RS 2.0 • Classe Link • Implementa RFC 5988 (Web Link) • Inserir metadados em mensagens HTTP • Link é serializado em um HTTP Response como um header HTTP • Representa um link hypermedia Wednesday, September 18, 13
  61. 61. Richardson Maturity Model • Nível 0 • POX • URI única • Nível 1 • URIs, verbo único • Nível 2 • CRUD • URIs, verbos • Nível 3 • Hypermedia • RESTful Service POX Recursos Verbos HTTP Controles Hypermedia Wednesday, September 18, 13
  62. 62. Hypermedia • Links para declarar próximos passos • Links para descrever transições de estado • Navegação altera estado do recurso • Máquina de estados e workflow • XHTML, ATOM , JSON Wednesday, September 18, 13
  63. 63. JAX-RS 2.0 • Link • adicionando links a um objeto Response • Consumindo em um cliente Wednesday, September 18, 13
  64. 64. Link: <http://.../orders/1/review>;rel=review;op=POST Link: <http://.../orders/1/cancel>;rel=cancel;op=POST <order> <id>1</id> <customer>http://.../customers/21</customer> <shippingAddress>http://.../customers/21/address/1<shippingAddress> <orderItems> <product>http://.../products/3345</product> <quantity>1</quantity> </orderItems> <status>RECEIVED</status> </order> Hypermerdia Reviewed Canceled Payed Refunded Received Shipped Wednesday, September 18, 13
  65. 65. Wednesday, September 18, 13
  66. 66. OBRIGADO !!!!! Wednesday, September 18, 13
  67. 67. OBRIGADO !!!!!  fabio@soujava.org.br @fabiovelloso Wednesday, September 18, 13
  68. 68. OBRIGADO !!!!!  fabio@soujava.org.br @fabiovelloso facebook.com/soujava @soujava soujava.org.br Wednesday, September 18, 13

×