Web Services II - Ricardo Luis dos Santos

Propaganda
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?
Download