Web Services REST

Propaganda
Web Services REST
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
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
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
HTML, XML e JSON
<html>
<head>
<head>
<title>Sílvio Bacalá Jr</title>
<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
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
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
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
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
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
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
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
Exercício: Criar um WS-REST
no NetBeans
• Criar um projeto Aplicação Web umrest
13
• No projetos, com o botão direito crie
14
15
16
• 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
• 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
19
Testando o WebService
• http://localhost:8084/umrest/cotacao/
• Implemente agora a consulta usando
subresources
• DolarToReal e EuroToReal
20
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
Parâmetros
• http://localhost:8080/path-param/1/2
• http://localhost:8080/path-param/java/csharp
22
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
MatrixParam
• http://localhost:8080/matrix-param;p1=1;p2=2
• http://localhost:8080/matrix-param;p1=java;p2=csharp
24
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
QueryParam
• http://localhost:8080/query-param?p1=1&p2=2
• http://localhost:8080/query-param?p1=java&p2=csharp
26
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
HeaderParam
• Os headers HTTP podemser recuperados através
da anotação @HeaderParam.
28
CookieParam
• Os valores dos cookies enviados nas requisições
HTTP podem ser recuperados através da
anotação @CookieParam.
29
Download