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
•
•
•
3
Tomcat é o servidor Web utilizado para executar as aplicações Java
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
Campus Sapucaia do Sul
Testando os serviços desenvolvidos
• HttpRequester (Firefox)
4
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
Campus Sapucaia do Sul
Testando os serviços desenvolvidos
• DHC (Chrome)
5
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
Campus Sapucaia do Sul
Testando os serviços desenvolvidos
• Soap UI (Vários SOs – Linux, Windows e Mac OS)
6
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
Campus Sapucaia do Sul
JAX-RS
|
Objetivo |
Descrição |
|
A API vai oferecer um conjunto de anotações e classes/interfaces |
|
|
Foco em POJOs |
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 |
Será possível o deployment em qualquer servidor de aplicações |
|
container |
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
•
•
8
Elas devem ser atribuídas a métodos públicos
As principais anotações estão presentes no pacote
javax.ws.rs
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
• Pequeno exemplo de Web Service REST
11
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
• Extraindo Valores
13
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"})
18
• Indica que a classe mapeia informações específicas
• Permite determinar, por exemplo, a order que os elementos serão exibidos
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)
19
• @XmlElement(name = "contrato")
• Utilizada tanto nos atributos quanto nos métodos, indica que o atributo será um atributo XML
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
• Exemplo WADL
23
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
• ApplicationConfig.java
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
26
• Web.xml (precedência)
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
27
• Web.xml (precedência)
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
Campus Sapucaia do Sul
Exemplo de Web Services - REST
• Método GET
28
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
• Método POST
31
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
Campus Sapucaia do Sul
Exemplo de Web Services - REST
• Consumindo POST
32
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
Campus Sapucaia do Sul
Exemplo de Web Services - REST
• Método PUT
33
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
Campus Sapucaia do Sul
Exemplo de Web Services - REST
• Consumindo PUT
34
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
Campus Sapucaia do Sul
Exemplo de Web Services - REST
• Método DELETE
35
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
Campus Sapucaia do Sul
Exemplo de Web Services - REST
• Consumindo DELETE
36
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
38
Transporte
- estado: String
- valor: Int
- peso: Float
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
Campus Sapucaia do Sul
Perguntas?
Mucho más que documentos.
Descubra todo lo que Scribd tiene para ofrecer, incluyendo libros y audiolibros de importantes editoriales.
Cancele en cualquier momento.