Web Services REST – JAX-RS Professor: Ricardo Luis dos Santos IFSUL – Campus Sapucaia do Sul © 2015 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Agenda • Principais tecnologias envolvidas • Testando os serviços desenvolvidos • JAX-RS • Principais anotações – JAX-RS • Principais anotações – JAXB • Entendendo o Web Service • Configurar o ambiente • Exemplo de Web Services – REST • Exercício 2 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais tecnologias envolvidas • JAX-RS é uma especificação que permite criar RESTful Web services (análoga a JAX-WS para SOAP) • Jersey é a principal implementação da especificação JAX-RS • JAXB (Java Architecture for XML Binding) permite parsear objetos para arquivos XML ou JSON • Tomcat é o servidor Web utilizado para executar as aplicações Java 3 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Testando os serviços desenvolvidos • 4 HttpRequester (Firefox) Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Testando os serviços desenvolvidos • 5 DHC (Chrome) Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Testando os serviços desenvolvidos • 6 Soap UI (Vários SOs – Linux, Windows e Mac OS) Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul JAX-RS Objetivo Descrição Foco em POJOs A API vai oferecer um conjunto de anotações e classes/interfaces associadas que possam ser usadas com POJOs para expô-los como recursos Web Explorar bem o HTTP HTTP é assumido como o protocolo de aplicação, permitindo utilizar os diferentes métodos implementados no protocolo Independência de formato A API permitirá o uso de diversos content-types. O suporte aos content-types será feito de uma forma plugável que defina uma forma padrão de extensão para o suporte a novos tipos de conteúdo Independência de container Será possível o deployment em qualquer servidor de aplicações Java EE e também nos containers de Servlets 7 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações – JAX-RS • Para acessar recursos são definidas diversas anotações correspondentes aos métodos HTTP • @GET – Implementa um WS para obter informações de um recurso • @POST – Implementa um WS para criar um recurso • @PUT – Implementa um WS para atualizar um recurso • @DELETE – Implementa um WS para deletar um recurso • Elas devem ser atribuídas a métodos públicos • As principais anotações estão presentes no pacote javax.ws.rs 8 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações – JAX-RS • @Path(“/repositorio/{id}”) • Pode ser colocada na declaração de classe ou de um método e possui o elemento value obrigatório • Por este elemento definimos o prefixo da URI que a classe ou o método irá atender • Aqui a URI relativa “/repositorio/{id}”, na qual {id} é o valor do parâmetro id, fornecido junto a URI • Geralmente incluída na declaração de um método quando queremos atribuir um caminho mais específico para um recurso, de forma a especializar nosso método 9 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações – JAX-RS • @Produces • Especifica os tipos MIME que o método produzirá como resposta para o cliente • @Consumes • Especificas os tipos MIME que o método pode receber do cliente • Para ambos podemos utilizar • MediaType.APPLICATION_XML • MediaType.APPLICATION_JSON • MediaType.TEXT_PLAIN • MediaType.TEXT_HTML 10 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações – JAX-RS • 11 Pequeno exemplo de Web Service REST Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações – JAX-RS • Extraindo Valores Anotação Descrição @PathParam Especifica que o valor do parâmetro, será extraído do valor de um parâmetro indicado na URI, colocado na anotação @Path({param}) @QueryParam Extrai o valor do parâmetro da URI Ex: ?idade=29&uf=RS @FormParam Associa um parâmetro a um campo de formulário enviado pelo cliente @MatrixParam Extrai informações do caminho de uma URI Ex: ;idade=29;uf=RS @CookieParam Extrai os valores de cookies vinculados à sessão @HeaderParam Extrai dados do cabeçalho de uma requisição HTTP 12 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações – JAX-RS • 13 Extraindo Valores Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações – JAX-RS • Algumas observações: • Uma mesma variável pode ser especificada múltiplas vezes em uma anotação @Path. • Exemplo: @Path("/users/{nome}/{nome}") • Neste caso, só serão aceitas requisições a URLs cujos dois últimos componentes sejam iguais • Variáveis podem ser vazias. Exemplo: • @Path("/users/{nome}/home") • Cliente acessa URL /users//home – A variável nome ganha o valor “” (String vazia) • Note ainda que a anotação @Path pode ser usada para métodos específicos • Aquele método será mapeado para aquela URL 14 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações – JAX-RS • Podemos ainda definir valores padrão com a anotação @DefaultValue • Usados em caso de omissão 15 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações – JAX-RS • Há restrições em relação aos tipos dos parâmetros • Só se pode usar tipos com as seguintes características: • Tipos primitivos, exceto char • Classes correspondentes a tipos primitivos, exceto Character • Qualquer classe com construtor que recebe um único argumento do tipo String • Qualquer classe com um método estático valueOf(String) • List<T>, Set<T>, SortedSet<T>, onde T cai em um dos casos anteriores. • Caso não seja possível mapear o valor presente na URL para o tipo do parâmetro, é gerado um erro 400 • Exemplo: parâmetro declarado como int, usuário especifica valor “teste” 16 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações - JAXB • Java Architecture for XML Binding (JAXB) fornece a API, as ferramentas e um framework para mapear documentos (XML) e objetos Java • Realiza o marshalling (serialização JAVA -> XML) e unmarshalling (deserialização XML -> JAVA) do conteúdo de documentos para representações Java • As anotações estão presentes no pacote javax.xml.bind.annotation • São utilizadas normalmente nos POJOs 17 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações - JAXB • Classes • @XmlRootElement • Indica que a classe será representada como um elemento XML principal • Pode alterar o nome do elemento através do valor “name=“ • @XmlAccessorType(XmlAccessType.FIELD) • Indica a localização das anotações, no caso estão nos campos do POJO • @XmlType(propOrder = {"id", "nome", "email", "cpf", "endereco", "nascimento"}) • Indica que a classe mapeia informações específicas • Permite determinar, por exemplo, a order que os elementos serão exibidos 18 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações - JAXB • Classes • @XmlEnum(String.class) • Permite mapear uma classe enum com as devidas anotações em cada valor • Atributos • @XmlEnumValue(“ACAO”) • Mapeia um valor de um enum • @XmlElementWrapper • Mapeia um objeto do tipo lista (com tags filhas) • @XmlElement(name = "contrato") • Utilizada tanto nos atributos quanto nos métodos, indica que o atributo será um atributo XML 19 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Principais anotações - JAXB • Atributos • @XmlAttribute(name=”num_cpf”) • Mapeia o valor de um campo como atributo no arquivo XML • @XmlList • Permite mapear atributos como listas dentro de uma única tag XML • @XmlSchemaType(name = "date") • Permite definir o mapeamento de diferentes tipos em Java • @XmlTransient • Permite definir que um atributo não será utilizado nas ações de serialização e deserialização de objetos 20 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Entendendo o Web service • A implementação do método OPTIONS é interessante • Ela retorna (como esperado) o conjunto de requisições que são suportadas • Mas também retorna um documento WADL 21 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Entendendo o Web service • WADL (Web Application Description Language)? • O WADL é um formato de documento utilizado para descrever aplicações Web em geral • Hoje, o exemplo mais comum de uso é com os RESTful Web Services • Provê informação sobre as operações oferecidas • Parâmetros esperados • Formato da entrada • Formato da resposta • É o equivalente para RESTful Web Services do WSDL para Big Web Services 22 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Entendendo o Web service • 23 Exemplo WADL Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Configurar o ambiente • Configuração de um RESTful web service • ApplicationConfig.java 24 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Configurar o ambiente • Configuração de um RESTful web service Informar aqui o padrão de URL • ApplicationConfig.java utilizada Adicionar cada classe dos serviços desenvolvidos 25 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Configurar o ambiente • Configuração de um RESTful web service • Web.xml (precedência) 26 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Configurar o ambiente • Configuração de um RESTful web service • Web.xml (precedência) Adicionar aqui o pacote que contenha os serviços desenvolvidos Informar aqui o padrão de URL utilizada 27 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Exemplo de Web Services - REST • 28 Método GET Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Exemplo de Web Services - REST • Consumindo GET • Construtor do cliente • Consumo 29 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Exemplo de Web Services - REST • Consumindo GET • Lista 30 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Exemplo de Web Services - REST • 31 Método POST Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Exemplo de Web Services - REST • 32 Consumindo POST Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Exemplo de Web Services - REST • 33 Método PUT Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Exemplo de Web Services - REST • 34 Consumindo PUT Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Exemplo de Web Services - REST • 35 Método DELETE Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Exemplo de Web Services - REST • 36 Consumindo DELETE Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Exercício • Fazer download do projeto WSRest • Configurar o persistence.xml • Criar a base de dados apropriada • Observar os Web Services implementados • Testar os Web Services mais simples (GET) diretamente no navegador • Testar os Web Services através do cliente implementado dentro do projeto 37 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Exercício • Gerar um POJO para Transporte conforme a classe abaixo, persistindo no BD • Gerar o DAO para cadastrar novos locais de entrega e o valor atrelado a estes, por peso • Gerar os devidos serviços para as operações CRUD sobre essa entidade • Criar um cliente para acessar os serviços desenvolvidos Transporte - 38 estado: String valor: Int peso: Float Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul Perguntas?