JAX-RS 2.0

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

×