Serviços web ou Web Services - STD29006 Engenharia de...

Post on 05-Jun-2020

1 views 0 download

Transcript of Serviços web ou Web Services - STD29006 Engenharia de...

Serviços web ou Web ServicesSTD29006 – Engenharia de Telecomunicações

Prof. Emerson Ribeiro de Mello

http://docente.ifsc.edu.br/mello/std

13 DE ABRIL DE 2020

Arquitetura Orientada a Serviços

Service Oriented Architecture – SOAOrganiza aplicações por meio de um conjunto de interações de serviçosque são acessados por meio de interfaces e protocolos padronizados

interfaces são auto-descritivas e baseadas em padrões abertos

São definidos três papéis:Diretório para registro de serviços – Repositório para publicação elocalização de interfaces dos serviços

Provedor de Serviços – Responsável por publicar interfaces dosserviços que provê, bem como atender requisições dos clientes

Cliente – Aplicação ou outro serviço que envia requisições a umServiço

1/34

Arquitetura Orientada a Serviços

Registro deserviços

Provedor deserviços

PublicarLocalizar

InvocarCliente

Descrição doserviço

Serviço

Descrição doserviço

2/34

O que são serviços

Neutro à tecnologiaInvocado através de tecnologias padrões (protocolos, mecanimos depublicação e de busca) amplamente aceitas

Fracamente acopladoNão requer o conhecimento prévio de qualquer estrutura internapresente no lado do cliente ou do serviço

Localização transparenteInformações sobre a definição e localização são publicadas em umrepositório e estão acessíveis a uma variedade de clientes,independente da localizações dos mesmos

3/34

Serviços Web (Web Services)

Serviço identificado por uma URL e que faz uso de padrões abertose amplamente difundidos (p.ex. HTTP e XML)

São auto-descritivosCliente e provedor só se preocupam com o formato e conteúdo dasmensagens a serem trocadas

Abstraindo-se dos detalhes de implementação (fraco acoplamento)

Coleção de operações sobre recursos (programas, objetos, bancode dados) que pode ser usada por clientes por meio da Internet

Facilidade para transpor firewalls baseados em filtros de pacotesTráfego para as portas 80 e 443 geralmente estão liberados

4/34

Serviços Web (Web Services)

Servidor web (web server) != Serviço Web (Web Service)

web server – implementa o protocolo HTTP

Web Service – provê um serviço baseado nas operações que foramdefinidas em sua interface

5/34

Representação dos dados

Representação Externa de Dados – acordo para representar dadosprimitivos e estrutura de dados em um formato padrão

Representação binária dos dadoseXternal Data Represenation (XDR)

CORBA IDL

Serialização de objetos Java

Google Protocol Buffers

Representação textual dos dadoseXtensible Markup Language (XML)

JavaScript Object Notation (JSON)

6/34

eXtensible Markup Language (XML)

XML permite ser estendida – usuários podem criar suas própriasmarcações (tags)

1 <pessoa>

2 <nome>Alice</nome>

3 <sobrenome>dos Santos</sobrenome>

4 <idade>20</idade>

5 <telefones>

6 <numeroTel tipo="residencial">48 3381 2800</numeroTel>

7 <numeroTel tipo="celular">48 93381 2800</numeroTel>

8 </telefones>

9 </pessoa>

7/34

JavaScript Object Notation (JSON)

10 {

11 "nome": "Alice",

12 "sobrenome": "dos Santos",

13 "idade": 20,

14 "telefones": [

15 {

16 "tipo": "residencial",

17 "#valor": "48 3381 2800"

18 },

19 {

20 "tipo": "celular",

21 "#valor": "48 93381 2800"

22 }

23 ]

24 }

Formato bem aceito em aplicações web, principalmente pelo fato dosnavegadores possuírem interpretadores JavaScript

8/34

Representação de um menu XML x JSON (fonte: Wikipedia)

25 <menu id="file" value="File">

26 <popup>

27 <menuitem value="New" onclick="CreateNewDoc()" />

28 <menuitem value="Open" onclick="OpenDoc()" />

29 <menuitem value="Close" onclick="CloseDoc()" />

30 </popup>

31 </menu>

32 {"menu":{

33 "id": "file",

34 "value": "File",

35 "popup":{

36 "menuitem": [

37 {"value": "New", "onclick": "CreateNewDoc()"},

38 {"value": "Open", "onclick": "OpenDoc()"},

39 {"value": "Close", "onclick": "CloseDoc()"}

40 ]

41 }

42 }}

9/34

Sintaxe do JSON – http://json.org/

Um objeto é um conjunto não ordenado de pares chave/valor

Os pares são encapsulados por chaves { e }

Dois pontos é usado para separar chave de valor

Vírgula é usada para separar pares

43 { "nome" : "Alice", "sobrenome" : "dos Santos"}

Um vetor é uma coleção ordenada de valores

Os valores são encapsulados por colchetes [ e ]

Vírgula é usada para separar valores

44 ["poo", "std", "bcd"]

10/34

Sintaxe do JSON – http://json.org/

Em um vetor, o valor pode ser:string, número, true, false, null, objeto ou vetor

Strings são delimitadas por aspas

Números são representados obrigatoriamente na forma decimal eseguem a sintaxe de representação do C/C++/Java

45 { "telefones": [

46 {

47 "id" : 1,

48 "tipo": "residencial",

49 "#valor": "48 3381 2800"

50 },

51 {

52 "id" : 2,

53 "tipo": "celular",

54 "#valor": "48 93381 2800"

55 }

56 ]

57 }

11/34

Arquitetura dos Serviços Web

Baseada no protocolo SOAPPossui diversas especificações para segurança, orquestração, etc.

Ex: WS-Policy, WS-Security, WS-Trust

Baseada no estilo RESTRepresentational State Transfer – REST

Fundamentado nos conceitos da WWW, que são: métodos HTTP, URIe linguagens de marcação (HTML, XML ou JSON)

12/34

Arquitetura dos Serviços Web: abordagem com SOAP

1 Descrever a interface do serviço utilizando uma linguagem padrãoWeb Services Description Language (WSDL)

2 Disponibilizar essa interface (documento XML)P.e. Universal Description, Discovery and Integration (UDDI)

3 Troca de mensagens XML entre clientes e serviçoSOAP

13/34

Arquitetura dos Serviços Web

WSDLWSDL

Cliente 4. Efetua a invocação ServiçoWeb

1. Publica2. Consulta

UDDI3. Obtém a descrição

do serviço

14/34

Web Services Descritpion Language – WSDL

Quais são os serviços oferecidos?

Quais as informações necessárias para invocar um serviço?

Como cliente e servidor sabem como processar as requisições?

Em qual formato o serviço deve enviar as informações para ocliente?

WDSLGramática em XML para especificar interfaces de Serviços Web

Operações disponíveis

Tipos de dados

Protocolos utilizados

Localização do serviço

15/34

Web Services Descritpion Language – WSDL

Quais são os serviços oferecidos?

Quais as informações necessárias para invocar um serviço?

Como cliente e servidor sabem como processar as requisições?

Em qual formato o serviço deve enviar as informações para ocliente?

WDSLGramática em XML para especificar interfaces de Serviços Web

Operações disponíveis

Tipos de dados

Protocolos utilizados

Localização do serviço

15/34

Documento WSDL

Um documento WSDL é composto por três elementos principais

definição dos tipos de dados(types)

especifica a estrutura e oconteúdo das mensagens

operações abstratas(messages e operation)

descreve as operações quepoderão ser executadas

associação dos serviços(port)

especifica como mapear asoperações nos protocolos derede utilizados para otransporte

DocumentoWSDL

Tipos dos dados dasmensagens

Operações abstratas

Associação dos Serviços

Transporte

16/34

Exemplo WSDL: Calculadora.java

58 public class Calculadora{

59

60 public int soma(int i1, int i2){

61 return i1 + i2;

62 }

63

64 public int subtracao(int i1, int i2){

65 return i1 - i2;

66 }

67 }

17/34

Documento WSDL

68 <wsdl:definitions targetNamespace="http://localhost/Calculadora.jws">

69

70 <wsdl:message name="subtracaoRequest">

71 <wsdl:part name="i1" type="xsd:int"/>

72 <wsdl:part name="i2" type="xsd:int"/>

73 </wsdl:message>

74

75 <wsdl:message name="somaRequest">

76 <wsdl:part name="i1" type="xsd:int"/>

77 <wsdl:part name="i2" type="xsd:int"/>

78 </wsdl:message>

79

80 <wsdl:message name="subtracaoResponse">

81 <wsdl:part name="subtracaoReturn" type="xsd:int"/>

82 </wsdl:message>

83

84 <wsdl:message name="somaResponse">

85 <wsdl:part name="somaReturn" type="xsd:int"/>

86 </wsdl:message>

18/34

Documento WSDL

87 <wsdl:portType name="Calculadora">

88

89 <wsdl:operation name="soma" parameterOrder="i1 i2">

90 <wsdl:input message="impl:somaRequest" name="somaRequest"/>

91 <wsdl:output message="impl:somaResponse" name="somaResponse"/>

92 </wsdl:operation>

93

94 <wsdl:operation name="subtracao" parameterOrder="i1 i2">

95 <wsdl:input message="impl:subtracaoRequest" name="subtracaoRequest"

/>

96 <wsdl:output message="impl:subtracaoResponse" name="

subtracaoResponse"/>

97 </wsdl:operation>

98

99 </wsdl:portType>

19/34

Documento WSDL

100 <wsdl:service name="CalculadoraService">

101

102 <wsdl:port binding="impl:CalculadoraSoapBinding" name="Calculadora">

103 <wsdlsoap:address location="http://localhost/Calculadora.jws"/>

104 </wsdl:port>

105

106 </wsdl:service>

107

108 </wsdl:definitions>

20/34

SOAP - Protocolo para troca de mensagens (RPC)Uma mensagem SOAP consiste de

EnvelopeElemento raiz no documento XMLque representa a mensagem SOAP

Header (opcional)Oferece mecanismos paraestender a mensagemInformações de roteamento,segurança, coordenação

BodyDocument - A RPC em si faz partedeste elementoFault (opcional)

SOAP Envelope

SOAP Header

Header Block

Header Block

Body Block

Body Block

SOAP Body

. . .

. . .

Comunicação pode ser síncrona ou assíncrona. Mensagens SOAPpodem ser transportadas sobre HTTP, SMTP, JMS, . . .

21/34

Pedido SOAP

109 <?xml version="1.0" encoding="UTF-8"?>

110 <soapenv:Envelope

111 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"

112 xmlns:xsd="http://www.w3.org/2001/XMLSchema"

113 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

114 <soapenv:Body>

115 <soma soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/

encoding/">

116 <op1 xsi:type="xsd:int">10</op1>

117 <op2 xsi:type="xsd:int">8</op2>

118 </soma>

119 </soapenv:Body>

120 </soapenv:Envelope>

22/34

Resposta SOAP

121 <?xml version="1.0" encoding="UTF-8"?>

122 <soapenv:Envelope

123 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"

124 xmlns:xsd="http://www.w3.org/2001/XMLSchema"

125 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

126 <soapenv:Body>

127 <somaResponse soapenv:encodingStyle=

128 "http://schemas.xmlsoap.org/soap/encoding/">

129

130 <somaReturn xsi:type="xsd:int">

131 18

132 </somaReturn>

133 </somaResponse>

134 </soapenv:Body>

135 </soapenv:Envelope>

23/34

REST: estilo de arquiteturapara Serviços Web

REpresentational State Transfer

REST se baseia no comportamento de aplicações web

Recursos estão dispostos em uma rede de páginas (uma máquina deestado virtual), de forma que o usuário progride na aplicação através delinks (transições de estado), que resulta na próxima página (estadoseguinte da aplicação).

24/34

REpresentational State Transfer

REST se baseia no comportamento de aplicações web

Recursos estão dispostos em uma rede de páginas (uma máquina deestado virtual), de forma que o usuário progride na aplicação através delinks (transições de estado), que resulta na próxima página (estadoseguinte da aplicação).

24/34

REpresentational State Transfer

fonte: REST in Pratice – Webber, J., Parastatidis, S., Robinson, I.

24/34

Fundamentos do REST

1 RecursosNa web todos os recursos possuem uma URIExemplos:

http://docente.ifsc.edu.br/mello/index.htmlhttp://localhost/blocos/a/laboratorios/sidi

2 AçõesA web possui uma interface uniforme e restrita para interagir com osrecursosMétodos de requisições HTTP: GET, POST, PUT e DELETE

3 RepresentaçõesComo os dados são retornados e representados para os clientesEx: HTML, XML, JSON

SOAP usa o HTTP como protocolo de transporte. REST usa o HTTPcomo protocolo de aplicação

25/34

Fundamentos do REST

1 RecursosNa web todos os recursos possuem uma URIExemplos:

http://docente.ifsc.edu.br/mello/index.htmlhttp://localhost/blocos/a/laboratorios/sidi

2 AçõesA web possui uma interface uniforme e restrita para interagir com osrecursosMétodos de requisições HTTP: GET, POST, PUT e DELETE

3 RepresentaçõesComo os dados são retornados e representados para os clientesEx: HTML, XML, JSON

SOAP usa o HTTP como protocolo de transporte. REST usa o HTTPcomo protocolo de aplicação

25/34

Recursos

Qualquer informação pode ser caracterizada como um recursoEx: página, imagem, coleção de recursos, etc

Recursos são identificados por uma URIUma URI identifica um único recurso, porém um recurso pode possuirmais de uma URI (relação muitos-para-um)

Formato da URI

scheme://host:port/path?queryString#fragment

scheme – HTTP, HTTPS, FTPhost – nome ou IPport – implícito ao esquema (p.e. 80 para http) ou explícitopath – segmentos de texto delimitados por /queryString – lista de parâmetros (nome=valor) delimitados por &fragment – ponto particular dentro um documento

26/34

Recursos

Qualquer informação pode ser caracterizada como um recursoEx: página, imagem, coleção de recursos, etc

Recursos são identificados por uma URIUma URI identifica um único recurso, porém um recurso pode possuirmais de uma URI (relação muitos-para-um)

Formato da URI

scheme://host:port/path?queryString#fragment

scheme – HTTP, HTTPS, FTPhost – nome ou IPport – implícito ao esquema (p.e. 80 para http) ou explícitopath – segmentos de texto delimitados por /queryString – lista de parâmetros (nome=valor) delimitados por &fragment – ponto particular dentro um documento

26/34

Identificação de Recursos

http://localhost/campushttp://localhost/campus/sjhttp://localhost/campus/sj/blocos/ahttp://localhost/campus/sj/blocos/a/laboratorioshttp://localhost/campus/sj/blocos/a/laboratorios/sidi

Ao percorrer o caminho do mais genérico para o mais específico, vocêestará navegando pelos dados

27/34

Ações – Métodos HTTP (verbos)Como as representações dos recursos são trocadas entre clientes e servidor

GET – obtém informações de um recurso

Obter lista com todos campi:GET http://localhost/campus

Obtém capacidade do laboratório de sistemas digitaisGET http://localhost/campus/laboratorios/sidi/capacidade

POST – Cria um recurso

Content: {bloco,laboratorio,equipamentos[],capacidade,. . . }POST http://localhost/campus

PUT – Atualiza um recurso

Atualiza informações do laboratório de sistemas digitaisContent: {bloco,laboratorio,equipamentos[],capacidade,. . . }PUT http://localhost/campus/laboratorios/sidi

DELETE – Remove um recurso

Remove o laboratório redes2DELETE http://localhost/campus/laboratorios/sidi

28/34

Ações – Métodos HTTP (verbos)Como as representações dos recursos são trocadas entre clientes e servidor

GET – obtém informações de um recursoObter lista com todos campi:

GET http://localhost/campusObtém capacidade do laboratório de sistemas digitais

GET http://localhost/campus/laboratorios/sidi/capacidade

POST – Cria um recurso

Content: {bloco,laboratorio,equipamentos[],capacidade,. . . }POST http://localhost/campus

PUT – Atualiza um recurso

Atualiza informações do laboratório de sistemas digitaisContent: {bloco,laboratorio,equipamentos[],capacidade,. . . }PUT http://localhost/campus/laboratorios/sidi

DELETE – Remove um recurso

Remove o laboratório redes2DELETE http://localhost/campus/laboratorios/sidi

28/34

Ações – Métodos HTTP (verbos)Como as representações dos recursos são trocadas entre clientes e servidor

GET – obtém informações de um recurso

Obter lista com todos campi:GET http://localhost/campus

Obtém capacidade do laboratório de sistemas digitaisGET http://localhost/campus/laboratorios/sidi/capacidade

POST – Cria um recursoContent: {bloco,laboratorio,equipamentos[],capacidade,. . . }POST http://localhost/campus

PUT – Atualiza um recurso

Atualiza informações do laboratório de sistemas digitaisContent: {bloco,laboratorio,equipamentos[],capacidade,. . . }PUT http://localhost/campus/laboratorios/sidi

DELETE – Remove um recurso

Remove o laboratório redes2DELETE http://localhost/campus/laboratorios/sidi

28/34

Ações – Métodos HTTP (verbos)Como as representações dos recursos são trocadas entre clientes e servidor

GET – obtém informações de um recurso

Obter lista com todos campi:GET http://localhost/campus

Obtém capacidade do laboratório de sistemas digitaisGET http://localhost/campus/laboratorios/sidi/capacidade

POST – Cria um recurso

Content: {bloco,laboratorio,equipamentos[],capacidade,. . . }POST http://localhost/campus

PUT – Atualiza um recursoAtualiza informações do laboratório de sistemas digitais

Content: {bloco,laboratorio,equipamentos[],capacidade,. . . }PUT http://localhost/campus/laboratorios/sidi

DELETE – Remove um recurso

Remove o laboratório redes2DELETE http://localhost/campus/laboratorios/sidi

28/34

Ações – Métodos HTTP (verbos)Como as representações dos recursos são trocadas entre clientes e servidor

GET – obtém informações de um recurso

Obter lista com todos campi:GET http://localhost/campus

Obtém capacidade do laboratório de sistemas digitaisGET http://localhost/campus/laboratorios/sidi/capacidade

POST – Cria um recurso

Content: {bloco,laboratorio,equipamentos[],capacidade,. . . }POST http://localhost/campus

PUT – Atualiza um recurso

Atualiza informações do laboratório de sistemas digitaisContent: {bloco,laboratorio,equipamentos[],capacidade,. . . }PUT http://localhost/campus/laboratorios/sidi

DELETE – Remove um recursoRemove o laboratório redes2

DELETE http://localhost/campus/laboratorios/sidi

28/34

Pedidos: REST vs SOAPEx: Serviço Web para obter a capacidade de um laboratório

SOAP

136 <?xml version="1.0" encoding="UTF-8"?>

137 <soapenv:Envelope

138 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >

139 <soapenv:body lab="http://localhost/campus/laboratorio">

140 <lab:getCapacidade>

141 <lab:id>redes2</lab:id>

142 </lab:getCapacidade>

143 </soapenv:body>

144 </soapenv:Envelope>

REST

145 GET http://localhost/campus/laboratorios/sidi/capacidade

29/34

REST: Pedido e resposta

30/34

REST vs RPC

Chamada de Procedimento Remoto (RPC)Foco na diversidade de operações

146 obterCapacidade(int id);

147 definirCapacidade(int id, int capacidade);

RESTFoco na diversidade de recursos

148 GET http://localhost/laboratorios/sidi/capacidade

149 PUT http://localhost/laboratorios

31/34

Resumo: Objetivo dos Serviços Web

Permitir a integração e interação de aplicativos dispostos em diferenteslocais, escritos em diferentes linguagens e residentes em diferentesarquiteturas. Há espaço para SOAP e REST coexistirem

32/34

Como codificar Serviços Web em Java

REST não é um padrão (faz uso de padrões: HTTP, URI, XML, etc.)JSR 311: JAX-RS: The Java API for RESTful Web ServicesJersey é a implementação de referência, presente no Java EE 6

SOAP é uma especificação padrão para WSJSR 224: JAX-WS: Java API for XML Web ServicesPresente desde o Java EE 5 (servidor de aplicação Glassfish)

Próxima aulaLaboratório para desenvolvimento de Serviços Web (Java e Python)

33/34

ExercíciosNão é necessário entregar, mas é necessário fazer antes da próxima aula!

1 O que são Serviços Web RESTful?

2 O que são serviços stateless e stateful?

3 O que é WADL? Seria equivalente a qual especificação apresentadana aula?

4 O que são Anotações Java? (Java Annotations)

5 O que são POJOs em Java?

34/34