JAX-RS 2.0

  • Published on
    06-Jun-2015

  • View
    415

  • Download
    0

Embed Size (px)

Transcript

  • 1. JAX-RS 2.0 As novidades do padro para desenvolvimento REST Fabio Velloso Wednesday, September 18, 13

2. Fabio Velloso Bacharel em Cincia da Computao pela Universidade Federal de So Carlos - UFSCar Fundador do SouJava Desenvolvendo projetos com tecnologia Java desde 96 Professor de SOA e Web Services do curso de Ps-Graduao "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. Agenda REST Conceitos JAX-RS Conceitos e principais anotaes JAX-RS 2.0 Novidades Wednesday, September 18, 13 4. Agenda REST Conceitos JAX-RS Conceitos e principais anotaes JAX-RS 2.0 Novidades Wednesday, September 18, 13 5. REST Estilo de arquitetura e suas restries Recursos identicados unicamente por uma URI Interface uniforme (GET, POST, PUT, DELETE) Componentes REST manipulam recursos alterando sua representao Mensagens auto-descritivas e sem estado ou stateless Informaes podem estar em cache Multiplas representaes Hypermedia Wednesday, September 18, 13 6. Aplicao 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. Aplicao CRUD com REST Wednesday, September 18, 13 8. Aplicao CRUD com REST 123Java: The Good Parts Jim Waldo0596803737978-0596803735 Wednesday, September 18, 13 9. Agenda REST Conceitos JAX-RS Conceitos e principais anotaes JAX-RS 2.0 Novidades Wednesday, September 18, 13 10. Java API for RESTful Web Services - JSR 331 Suporte a RESTful em Java API padronizada Programao declarativa Anotaes POJO Integrado ao JEE6 (JSR 313) Wednesday, September 18, 13 11. Java API for RESTful Web Services - JSR 331 Wednesday, September 18, 13 12. Java API for RESTful Web Services - JSR 331 Recurso Recurso Wednesday, September 18, 13 13. Java API for RESTful Web Services - JSR 331 Recurso Recurso Mtodo HTTP Wednesday, September 18, 13 14. Java API for RESTful Web Services - JSR 331 Recurso Recurso Mtodo HTTP Serializao Serializao Wednesday, September 18, 13 15. Java API for RESTful Web Services - JSR 331 @Path, @PathParam, @Produces, @Consumes @HeaderParam, @QueryParam, @MatrixParam @NewCookie Recurso Recurso Mtodo HTTP Serializao Serializao Wednesday, September 18, 13 16. Agenda REST Conceitos JAX-RS Conceitos e principais anotaes JAX-RS 2.0 Novidades Wednesday, September 18, 13 17. JAX-RS 2.0 Java API for RESTful Web Services JSR 339 Client API Validao Filters e Interceptors Processamento assncrono Melhorias ResourceTemplate Link JAX-RS 2.0JCP JAVA EXTRA!! Wednesday, September 18, 13 18. Client API Objetivos: Encapsular os conceitos e principais restries 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. Client API Padronizao da API client Portvel entre implementaes Consumo de Web Services expostos sobre HTTP Pode acessar servios REST construdos em outras linguagens e frameworks ou acessar extenses como Web Dav Setar parmetros e conguraes Form, headers, SSL Wednesday, September 18, 13 20. Client API Classes e interfaces mais importantes Client Usada para criar e acessar web resources e congurar propriedades de conexes e requisies 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. Client API Client API com todos objetos Fluent API Wednesday, September 18, 13 22. Client API Invocation Requisio preparada e pronta a ser executada Interface genrica (command) com clara separao de conceitos: Creator - cria a requisio Submitter - envia a requisio No precisa conhecer como o Invocation preparado e sim quando e como ele executado Forma sncrona Forma assncrona Wednesday, September 18, 13 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 invs = Arrays.asList(inv1, inv2); Collection ress = Collections.transform(invs, new F() { @Override public Response apply(Invocation inv) { return inv.invoke(); } }); Wednesday, September 18, 13 24. Client API Setar parmetros do request uent api Form Wednesday, September 18, 13 25. Client API Setar parmetros do request uent api Form Objeto JAXB Wednesday, September 18, 13 26. Validation Verica o contedo e formao de um ou mais campos Utiliza Beans Validation Suporte por anotaes de validao em: Campos e propriedades Mtodos (response entities) Resource classes Parmetros (inclusive request entity) lana javax.validation.ValidationException Wednesday, September 18, 13 27. Validation @NotNull Varica se o campo nulo se nulo javax.validation.ValidationException Wednesday, September 18, 13 28. Validation @NotNull Varica se o campo nulo se nulo javax.validation.ValidationException Wednesday, September 18, 13 29. Validation Aplicvel a campos @Path("/") public class UserResource { @NotNull @FormParam("userName") private String userName; Aplicvel a mtodos @NotNull @FormParam("userName") public void setUserName(String userName) { this.username = userName; } Wednesday, September 18, 13 30. Validation Aplicvel a recursos @Path("/createUser") @PhoneRequired public class CreateUserResource { @FormParam("homePhone") private Phone homePhone; @FormParam("mobilePhone") private Phone mobilePhone; } Wednesday, September 18, 13 31. Validation @Pattern com expresses regulares javax.validation.constraints.Pattern Erro - HTTP Status 400 - Bad Request Wednesday, September 18, 13 32. Validation @Valid valida no mtodo 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 criaco } Erro na validao (ValidationException) retorna HTTP 400 ou HTTP 500 Wednesday, September 18, 13 33. Validation Custom Validation Validao denida pelo desenvolvedor Implementar a interface ConstraintValidator Wednesday, September 18, 13 34. Filters Utilizados para modicar 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. ContainerResponseFilters Utilizado para modicar response alterando Headers Classe tem de implementar ContainerResponseFilter Filtros so aplicados globalmente em todos recursos da aplicao por padro Wednesday, September 18, 13 36. ContainerResponseFilters Filtros por padro so chamados de globais e aplicados a todos os recursos da aplicao Anotao @NameBinding Altera o comportamento padro Especica a quais recursos o ltro aplicado Filtros com essa caracterstica so chamados name-bound Wednesday, September 18, 13 37. @NameBinding - passos Denir a Interface e anotao Denir e anotar a classe com @Provider e @ Wednesday, September 18, 13 38. @NameBinding - passos Anotar os recursos para o ltro Todos os itros so executados como pos matching Executados aps selecionar qual mtodo deve ser acessado para cada request Pode ser alterado usando a anotao @PreMatching so executados antes do iniciar o matching Wednesday, September 18, 13 39. ContainerRequestFilters Similares aos ResponseFilters Possibilitam alteram os parmetros do request No possuem parmetro ContainerResponseContext RequestFilters so executados como post-matching executados aps o recurso a ser executado ser encontrado GET, POST, PUT ou DELETE Pode-se alterar utilizando a anotao @PreMatching executa o ltro antes do matching do mtodo Wednesday, September 18, 13 40. ContainerRequestFilters @PreMatching Altera todos os mtodos PUT para POST Assume que o cdigo a ser executado o mesmo Wednesday, September 18, 13 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 sada) Interceptors so globais (aplicados a todos os recursos) Anotao @NameBinding (name-bound) Especica a quais recursos o ltro aplicado Wednesday, September 18, 13 42. Interceptors Wednesday, September 18, 13 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 la at execuo Quando recebe a resposta envia para o client @Suspended indica que o mtodo ser executado de maneira assncrona Possvel setar timeout, portanto faa! Wednesday, September 18, 13 44. Asynchronous Processing Wednesday, September 18, 13 45. Asynchronous Processing @Suspended mtodo assncrono Wednesday, September 18, 13 46. Asynchronous Processing @Suspended mtodo assncrono Nova thread Wednesday, September 18, 13 47. Asynchronous Processing @Suspended mtodo assncrono Nova thread retorna void Wednesday, September 18, 13 48. Asynchronous Processing @Suspended mtodo assncrono Nova thread Executa na nova thread retorna void Wednesda