Está en la página 1de 39

Web Services REST JAX-RS

Professor: Ricardo Luis dos Santos IFSUL Campus Sapucaia do Sul

Ricardo Luis dos Santos IFSUL – Campus Sapucaia do Sul © 2015 Instituto Federal de Educação,

© 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

– 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

servidor Web utilizado para executar as aplicações Java Instituto Federal de Educação, Ciência e Tecnologia

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

Testando os serviços desenvolvidos

HttpRequester (Firefox)

os serviços desenvolvidos • HttpRequester (Firefox) 4 Instituto Federal de Educação, Ciência e Tecnologia

4

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

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)

Testando os serviços desenvolvidos • DHC (Chrome) 5 Instituto Federal de Educação, Ciência e Tecnologia

5

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

• 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)

• Soap UI (Vários SOs – Linux, Windows e Mac OS) 6 Instituto Federal de Educação,

6

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

Linux, Windows e Mac OS) 6 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia

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

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

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

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

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

– JAX-RS • Pequeno exemplo de Web Service REST 11 Instituto Federal de Educação, Ciência e

11

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

de Web Service REST 11 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do

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

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

Principais anotações – JAX-RS • Extraindo Valores 13 Instituto Federal de Educação, Ciência e Tecnologia
Principais anotações – JAX-RS • Extraindo Valores 13 Instituto Federal de Educação, Ciência e Tecnologia

13

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

• 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

mapeado para aquela URL 14 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do

Principais anotações JAX-RS

Podemos ainda definir valores padrão com a anotação @DefaultValue

Usados em caso de omissão

a anotação @DefaultValue • Usados em caso de omissão 15 Instituto Federal de Educação, Ciência e

15

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

em caso de omissão 15 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do

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

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

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

por exemplo, a order que os elementos serão exibidos Instituto Federal de Educação, Ciência e Tecnologia

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

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

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

são suportadas • Mas também retorna um documento WADL 21 Instituto Federal de Educação, Ciência e

21

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

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

para Big Web Services 22 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do

Entendendo o Web service

Exemplo WADL

Entendendo o Web service • Exemplo WADL 23 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

23

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

• 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

de um RESTful web service • ApplicationConfig.java 24 Instituto Federal de Educação, Ciência e Tecnologia

24

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

ApplicationConfig.java 24 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul

Configurar o ambiente

Informar aqui o padrão de URL utilizada
Informar aqui o padrão de URL
utilizada

Configuração de um RESTful web service

ApplicationConfig.java

Adicionar cada classe dos serviços desenvolvidos
Adicionar cada classe dos serviços
desenvolvidos

25

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

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

26

Web.xml (precedência)

de um RESTful web service 26 • Web.xml (precedência) Instituto Federal de Educação, Ciência e Tecnologia

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

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)

Adicionar aqui o pacote que contenha os serviços desenvolvidos Informar aqui o padrão de URL
Adicionar aqui o pacote que contenha os
serviços desenvolvidos
Informar aqui o padrão de URL
utilizada

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

padrão de URL utilizada Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul

Exemplo de Web Services - REST

Método GET

Exemplo de Web Services - REST • Método GET 28 Instituto Federal de Educação, Ciência e

28

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

- REST • Método GET 28 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia

Exemplo de Web Services - REST

Consumindo GET

Construtor do cliente

- REST • Consumindo GET • Construtor do cliente • Consumo 29 Instituto Federal de Educação,

Consumo

• Consumindo GET • Construtor do cliente • Consumo 29 Instituto Federal de Educação, Ciência e

29

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

do cliente • Consumo 29 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do

Exemplo de Web Services - REST

Consumindo GET

Lista

Exemplo de Web Services - REST • Consumindo GET • Lista 30 Instituto Federal de Educação,

30

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

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

Exemplo de Web Services - REST • Método POST 31 Instituto Federal de Educação, Ciência e

31

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

REST • Método POST 31 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do

Exemplo de Web Services - REST

Consumindo POST

Exemplo de Web Services - REST • Consumindo POST 32 Instituto Federal de Educação, Ciência e
Exemplo de Web Services - REST • Consumindo POST 32 Instituto Federal de Educação, Ciência e

32

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

• 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

Exemplo de Web Services - REST • Método PUT 33 Instituto Federal de Educação, Ciência e

33

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

- REST • Método PUT 33 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia

Exemplo de Web Services - REST

Consumindo PUT

Exemplo de Web Services - REST • Consumindo PUT 34 Instituto Federal de Educação, Ciência e

34

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

• 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

Exemplo de Web Services - REST • Método DELETE 35 Instituto Federal de Educação, Ciência e

35

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

• 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

Exemplo de Web Services - REST • Consumindo DELETE 36 Instituto Federal de Educação, Ciência e

36

Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense

Campus Sapucaia do Sul

• 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

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

Int - peso: Float Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense Campus Sapucaia do Sul

Perguntas?

Perguntas?