Serviços web ou Web Services - STD29006 Engenharia de...
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