29
Web Services REST

Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

  • Upload
    others

  • View
    17

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Web Services REST

Page 2: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Web Service • Serviço oferecido por um sistema que pode ser

acessado diretamente por outro sistema desenvolvido em qualquer tecnologia através de uma rede como a internet.

• Cada plataforma oferece os recursos necessários para que os desenvolvedores possam disponibilizar ou acessar web services.

• A W3C define alguns padrões para definir o funcionamento de um web service.

• A especificação Java relacionada a Web Services que seguem os padrões da W3C é a Java API for XML-Based Web Services - JAX-WS.

2

Page 3: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Web Services

• Como alternativa, é possível desenvolver web services seguindo os princípios do estilo arquitetural REST (Representational State Transfer ).

• Em geral, web services REST são mais fáceis de implementar e evoluir.

• Na plataforma Java, há especificações que definem o modelo de programação de web services Java que seguem os princípios REST.

• A principal especificação para esse tipo de web service é a API for RESTfulWeb Services JAX-RS. 3

Page 4: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Resources, URIs,Media Types

• Resource : qualquer informação disponível

• Exemplos de resources: • O cadastro de uma pessoa,

• uma imagem,

• um documento e a

• cotação de uma moeda.

• Deve possuir um identificador único. Esse identificador será utilizado para que o resource possa ser acessado.

• URI (Uniform Resource Identifier) : identificador de um web resources na internet ou em uma intranet

• Media Type: formas de representação de resources.

• Na web é normal que o cadastro de uma pessoa possa ser obtido em html, xml e json.

4

Page 5: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

HTML, XML e JSON

<html> <head> <title>Sílvio Bacalá Jr</title> <head> <body> <h1>Sílvio Bacalá Jr</h1> <p>esse cara sou eu!</p> </body> </html> <pessoa> <nome>Sílvio Bacalá Jr</nome> <descricao>esse cara sou eu!</descricao> </pessoa> {"nome": "Sílvio Bacalá Jr", "descricao": "esse cara sou eu!"}

5

Page 6: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Operações

• Em uma arquitetura REST, um conjunto pequeno e fixo de operações deve ser definido previamente.

• As operações são utilizadas para manipular os recursos de alguma forma.

• Os recursos são manipulados pelos métodos do protocolo HTTP. Podemos atribuir uma semântica diferente para cada método HTTP.

• Exemplo: • usamos o GET para pegar a lista de clientes,

• usamos o POST para adicionar um cliente na lista.

6

Page 7: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Web service com JAX-RS

• A especificação JAX-RS define um modelo de programação para a criação de web services restful (web service que seguem os princípios do estilo arquitetural REST).

7

Page 8: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Resources

• De acordo com a JAX-RS, os web resources são implementados por classes Java.

• Todo web resource deve possuir uma URI que é definida parcialmente pela anotação @Path.

8

Page 9: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Resources

• Os métodos HTTP podem ser mapeados para métodos Java de uma classe. As anotações

• @GET, @PUT, @POST, @DELETE e @HEAD são utilizadas para realizar esse mapeamento.

9

Page 10: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Resources

• Media Type, utilizado para a representação

do resource, pode ser definido através da

anotação @Produces e o do enum MediaType.

10

Page 11: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Subresource

• A princípio, uma classe define apenas um resource. Porém, podemos definir subresources dentro de uma classe através de métodos anotados com @Path.

11

Page 12: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Subresource • O sufixo da URI de um subresource é definido pela

concatenação do valor da anotação @Path aplicada na classe com o valor da anotação @Path aplicada no método correspondente ao subresource.

• No exemplo mostrado, temos dois subresources com URI que possuem os seguintes sufixos:

• /Cotacao/DollarToReal

• /Cotacao/EuroToReal.

12

Page 13: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Exercício: Criar um WS-REST no NetBeans • Criar um projeto Aplicação Web umrest

13

Page 14: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

• No projetos, com o botão direito crie

14

Page 15: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

15

Page 16: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

16

Page 17: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

• Agora, é preciso indicar o caminho para que o serviço seja invocado automaticamente.

• Chame a aba do projeto com o botão direito e selecione Propriedades (lá embaixo). 17

Page 18: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

• Selecione em Executar para escolher URL relativo.

• A URL completa é do tipo http://localhost:8080/projeto/webresources/service

• Nosso serviço é cotacao

• webresource é a parte do caminho atualizada na @javax.ws.rs.ApplicationPath("webresources"), no arquivo ApplicationConfig.java criado pelo NetBeans.

• A URL relativa será /websource/cotacao

• Se preferir, pode deixar apenas uma “/” para eliminar webresource da URL e ficar apenas /cotacao

18

Page 19: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

19

Page 20: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Testando o WebService

• http://localhost:8084/umrest/cotacao/

• Implemente agora a consulta usando subresources

• DolarToReal e EuroToReal

20

Page 21: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Parâmetros

PathParam

• Suponha que desejamos utilizar URIs com o seguinte formato para realizar a cotação de moedas

• /Cotacao/Dollar/Real: Valor do Dollar em Real.

• /Cotacao/Euro/Real: Valor do Euro em Real.

• /Cotacao/Moeda1/Moeda2: Valor da Moeda1 na Moeda2

• Para trabalhar com uris com esse formato, podemos definir parâmetros na URI de um resource através da anotação @PathParam.

@Path {"/{ M1 }/{ M2}"}

21

Page 22: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

Parâmetros

• http://localhost:8080/path-param/1/2 • http://localhost:8080/path-param/java/csharp

22

Page 23: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

MatrixParam

• Suponha que desejamos utilizar uris com o seguinte formato para realizar a cotação de moedas

/Cotacao;M1=dollar;M2=real: Valor do Dollar em Real.

/Cotacao;M1=euro;M2=real: Valor do Euro em Real.

• As URIs acima possuem dois matrix params: M1 e M2. Esses parâmetros podem ser recuperados através da anotação @MatrixParam

public String cotacao ( @MatrixParam ("M1") String m1 ,

@MatrixParam ("M2") String m2){ 23

Page 24: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

MatrixParam

• http://localhost:8080/matrix-param;p1=1;p2=2 • http://localhost:8080/matrix-param;p1=java;p2=csharp 24

Page 25: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

QueryParam

• Suponha que desejamos utilizar uris com o seguinte formato para realizar a cotação de moedas

/Cotacao?M1=dollar&M2=real: Valor do Dollar em Real.

/Cotacao?M1=euro&M2=real: Valor do Euro em Real.

• As URIs acima possuem dois query params: M1 e M2. Esses parâmetros podem ser recuperados através da anotação @QueryParam

public String cotacao ( @QueryParam ("M1") String m1 ,

@QueryParam ("M2") String m2){ 25

Page 26: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

QueryParam

• http://localhost:8080/query-param?p1=1&p2=2 • http://localhost:8080/query-param?p1=java&p2=csharp

26

Page 27: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

FormParam

• Parâmetros enviados através de formulários HTML que utilizam o método POST do HTTP podem ser recuperados através da anotação @FormParam.

27

Page 28: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

HeaderParam

• Os headers HTTP podemser recuperados através da anotação @HeaderParam.

28

Page 29: Web Services REST - FACOMbacala/ANDROID/14 - Web Services REST.pdf · 2016-11-17 · Web Services •Como alternativa, é possível desenvolver web services seguindo os princípios

CookieParam

• Os valores dos cookies enviados nas requisições HTTP podem ser recuperados através da anotação @CookieParam.

29