tópicos de sistemas de informação a

33
Tópicos de Sistemas de Informação A Carlos Oberdan Rolim Ciência da Computação

Upload: phillip-tassos

Post on 03-Jan-2016

21 views

Category:

Documents


0 download

DESCRIPTION

Tópicos de Sistemas de Informação A. Carlos Oberdan Rolim Ciência da Computação. WSDL (Web Services Definition Language). Motivação. Definição. Proporciona modelo e formato XML para descrever Web Services - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Tópicos de Sistemas de Informação A

Tópicos de Sistemas de Informação A

Carlos Oberdan Rolim

Ciência da Computação

Page 2: Tópicos de Sistemas de Informação A

WSDL

(Web Services Definition Language)

Page 3: Tópicos de Sistemas de Informação A

Motivação

Page 4: Tópicos de Sistemas de Informação A

Definição

Proporciona modelo e formato XML para descrever Web Services

O seu principal objetivo é descrever as interfaces apresentadas e apontar a localização dos seus serviços, permitindo que o cliente os acesse de maneira confiável.

Por ser um documento XML, sua leitura se torna fácil e acessível.

Versão 1.1 – Março 2001

Versão 1.2 – Working Draft - Julho 2002

Versão 2.0

Recomendação W3C em 26 de Junho de 2007

Esforço conjunto entre Microsoft, IBM e Ariba

Page 5: Tópicos de Sistemas de Informação A

Independência de plataforma

O cliente não precisa saber qual a linguagem do programação ou plataforma de execução em que o provedor de serviços está baseado.

A descrição do serviço em conjunto com a infra-estrutura SOAP adjacente encapsula detalhes tanto no lado do cliente quanto no lado do provedor.

Page 6: Tópicos de Sistemas de Informação A

O uso de WSDL na arquitetura de Web Services é em geral dividido em duas partes:

Abstrata: interface do serviço

Abstrai a funcionalidade oferecida pelo serviço

Concreta: implementação do serviço.

Detalhes concretos do serviço de como e onde a funcionalidade é oferecida

Cada parte pode ser definida de maneira independente e conseqüentemente reutilizada por outras aplicações.

Page 7: Tópicos de Sistemas de Informação A

Elementos da WSDLWSDL document

Types (type information for the document, e.g., XML Schema)

Message 1 Message 4Message 3Message 2

Operation 1 Operation 3Operation 2

Message 6Message 5

Interface (abstract service)

binding 1

endpoint 1

binding 2

endpoint 2

binding 3

endpoint 3

binding 4

endpoint 4

Service (the interface in all its available implementations)

Ab

stra

ct d

escr

ipti

on o

f th

e se

rvic

eC

oncr

ete

des

crip

tion

of

th

e se

rvic

e

Page 8: Tópicos de Sistemas de Informação A

Interface de serviço

Descrição abstrata

Descreve de forma abstrata o WS em termos de mensagens que ele envia e recebe

O tipo de sistema usado pra descrever as mensagens (baseado em XML Schema)

As mensagens usadas para invocar o serviço

Define como operação o agrupamento de uma ou mais mensagens segundo um padrão de troca de mensagens

O padrão de troca de mensagens identifica a seqüência e a cardinalidade das mensagens enviadas/recebidas bem como quem está as enviando/recebendo

Uma interface que agrupa as operações que constituem um serviço abstrato

Semelhante a IDL (CORBA).

Page 9: Tópicos de Sistemas de Informação A

Implementação do serviço

Descrição concreta

Define um serviço como um agrupamento de pontos de serviço (endpoints) que implementam a interface

Define os pontos de serviço ou endereço de rede de onde ocorre a associação

Associa a interface ao protocolo de transporte

A implementação de serviço é um documento WSDL que descreve como uma interface particular é implementada por um determinado provedor de serviços. 

Page 10: Tópicos de Sistemas de Informação A

Componentes

Tipos de dados: Denominados de tipos <types>.

Parâmetros de entrada e saída de um serviço: Denominados de mensagem <message>.

O relacionamento entre parâmetros de entrada e saída: Assinatura do método, denominada de operações <operation>.

Agrupamento lógico de operações: Denominado de tipo de porta <portType>.

O protocolo a ser usado para acessar os métodos de um objeto: Denominado de vínculo, define o protocolo a ser usado para acessar os métodos de um objeto (SOAP, HTTP ou MIME).

Endereço do serviço. define a localização fisica de um serviço <service>.

Page 11: Tópicos de Sistemas de Informação A
Page 12: Tópicos de Sistemas de Informação A

Elementos da Interface de Serviço

Tipos (types)

Definem os tipos de dados que são utilizados para descrever as mensagens.

Para melhor interoperabilidade e independência de plataforma usa-se sintaxe de XSD (XML Schema Documents)

Page 13: Tópicos de Sistemas de Informação A

Exemplo<types> <schema targetNamespace="http://example.com/stockquote.xsd“ xmlns="http://www.w3.org/2000/10/XMLSchema">

<element name="TradePriceRequest"> <complexType> <all> <element name="tickerSymbol" type="string"/> </all> </complexType> </element>

<element name="TradePrice"> ...

</element> </schema>

</types>

Page 14: Tópicos de Sistemas de Informação A

Mensagens (message)

Representam uma definição abstrata dos dados que serão usados em uma operação.

Cada elemento message recebe um ou mais elementos <part>, que formam as partes reais da mensagem. O elemento <part> define o conteúdo da mensagem representando os parâmetros que são passados e a resposta que o serviço retorna

Cada <part> pode ser comparada com os parametros de uma chamada de função em uma linguagem de programação tradicional

Elementos da Interface de Serviço

Page 15: Tópicos de Sistemas de Informação A

Exemplo

<message name="getTermRequest">

<part name="term" type="xs:string"/>

</message>

<message name="getTermResponse">

<part name="value" type="xs:string"/>

</message>

Page 16: Tópicos de Sistemas de Informação A

Operações (operation)

Definição abstrata de uma ação que um serviço pode executar. Indica a ordem dos parametros usados nas operações.

Existem quatro diferentes tipos de mensagens de operações:

Operação unidirecional: Define uma mensagem enviada de um cliente para um serviço, sem resposta.

Solicitação-Resposta: O mais utilizado. O cliente envia uma solicitação a um serviço, e recebe como resultado uma mensagem de resposta com o resultado dessa solicitação. Pode ser vista como um RPC (remote procedure call).

Pedido-Resposta: Não utilizada freqüentemente. Define uma mensagem enviada do serviço para o cliente, resultando em uma mensagem enviada do cliente de volta para o serviço.

Notificação: É quando o serviço envia uma mensagem para o cliente

Elementos da Interface de Serviço

Page 17: Tópicos de Sistemas de Informação A

Elementos da Interface de Serviço

Operação unidirecional

<portType name=“....."> <operation name=“SetPrice"> <input message="tns:setPriceInput"/> <documentation> text </documentation>

</operation>

</portType>

Page 18: Tópicos de Sistemas de Informação A

Elementos da Interface de Serviço

Solicitação-resposta

<portType name=“....."> <operation name="GetLastTradePrice"> <input message="tns:GetLastTradePriceInput"/> <output message="tns:GetLastTradePriceOutput"/> <fault message="tns:FaultMessagePrice"/> <documentation> text </documentation></operation></portType>

Page 19: Tópicos de Sistemas de Informação A

Elementos da Interface de Serviço

Pedido-resposta

<portType name=“....."> <operation name="GetClientPrice"> <output message="tns:RequestPrice"/> <input message="tns:GetPriceInput"/> <fault message="tns:FaultMessagePrice"/> <documentation> text </documentation></operation></portType>

Page 20: Tópicos de Sistemas de Informação A

Elementos da Interface de Serviço

Notificação

<portType name=“....."> <operation name=“SendNotification"> <output message="tns:NotifyClient"/> <documentation> text </documentation></operation>

</portType>

Page 21: Tópicos de Sistemas de Informação A

Tipos de portas (portType)

O elemento <portType> é o elementos mais importante de um WSDL

Descreve um web service, as operações que podem ser efetuadas e as mensagens de entrada e saida que estão envolvidas

Agrupa um conjunto de operações

Pode ser comparado a um módulo ou classe em uma linguagem de programação tradicional

Elementos da Interface de Serviço

Page 22: Tópicos de Sistemas de Informação A

Exemplo

<portType name="StockQuotePortType">

<operation name="GetLastTradePrice"> <input message="tns:GetLastTradePriceInput"/> <output message="tns:GetLastTradePriceOutput"/> </operation>

<operation name=“SendNotification"> <output message="tns:NotifyClient"/> </operation>

</portType>

Page 23: Tópicos de Sistemas de Informação A

Ligações (binding) O elemento binding mapeia os elementos operation em um elemento portType, para um protocolo especifico.

Associa o elemento portType ao protocolo SOAP, utilizando-se de um elemento de extensão SOAP chamado <wsdlsoap:binding>, através de dois parâmentos: protocolo de transporte e o estilo da requisição (rpc ou document).

Elementos da Interface de Serviço

Page 24: Tópicos de Sistemas de Informação A

Exemplo

<binding name='ExemploBinding' type='tns:ExemploPortType'>

  <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>

  <operation name='getNome'>

    <soap:operation soapAction='exemplo#getNome'/>

    <input>

       <soap:body use='encoded' namespace='exemplo‘

         encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>

     </input>

     <output>

       <soap:body use='encoded' namespace='exemplo‘

   encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>

    </output>

  </operation>

</binding>

Page 25: Tópicos de Sistemas de Informação A

Implementação do Serviço

Porta (port)

Especifica um endereço para uma ligação, definindo então um endpoint único.

Page 26: Tópicos de Sistemas de Informação A

Exemplo

<port name='ExemploPort' binding='ExemploBinding'>

    <soap:address location='http://127.0.0.1/servidor.php'/>

  </port>

Page 27: Tópicos de Sistemas de Informação A

Implementação do Serviço

Serviço (service)

Define um ws agregando um conjunto de portas relacionados entre si.

Exemplo

<service name='ExemploService'> <documentation>My first service</documentation>

  <port name='ExemploPort' binding='ExemploBinding'>

     <soap:address location='http://127.0.0.1/servidor.php'/>

   </port>

</service>

Page 28: Tópicos de Sistemas de Informação A

Resumo dos elementos

Types– define os tipos de dados usados nas trocas de mensagens

Message– representa de forma abstrata os dados que estão sendo transmitidos

Operation– descrição abstrata de uma ação suportada pelo serviço

Port Type– um conjunto abstrato de operações suportadas por um ou mais pontos de serviço

Binding– associa concretamente o elemento portType a um protocolo (geralmente SOAP)

Port– um único ponto de servico (endpoint) definido como uma combinação de pontos de ligação (binding) e endereços de rede (network address).

Service– um conjunto de pontos de serviços (endpoints).

Page 29: Tópicos de Sistemas de Informação A

Exemplo prático

A seguir é apresentado um exemplo prático de um ws.

Primeiro é definido o arquivo wsdl

É apresentada a implementação do servidor

Por fim o código fonte do cliente usado para consumir o ws

Page 30: Tópicos de Sistemas de Informação A

<?xml version ='1.0' encoding ='ISO 8859 1' ?><definitions name='Exemplo'   targetNamespace='http://example.org/Exemplo'   xmlns:tns='http://example.org/Exemplo'   xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'   xmlns:xsd='http://www.w3.org/2001/XMLSchema'    xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'   xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'   xmlns='http://schemas.xmlsoap.org/wsdl/'> <message name='getNomeRequest'>   <part name='codigo' type='xsd:string'/> </message> <message name='getNomeResponse'>   <part name='resultado' type='xsd:string[]'/> </message>

<portType name='ExemploPortType'>

    <operation name='getNome'>

      <input message='tns:getNomeRequest'/>

     <output message='tns:getNomeResponse'/>

   </operation>

</portType> Codigo fonte do arquivo exemplo.wsdl

Page 31: Tópicos de Sistemas de Informação A

<binding name='ExemploBinding' type='tns:ExemploPortType'>

   <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>

   <operation name='getNome'>

     <soap:operation soapAction='exemplo#getNome'/>

     <input>

       <soap:body use='encoded' namespace='exemplo'

         encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>

     </input>

     <output>

       <soap:body use='encoded' namespace='exemplo'

         encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>

     </output>

   </operation>

</binding>

<service name='ExemploService'>

   <port name='ExemploPort' binding='ExemploBinding'>

     <soap:address location='http://127.0.0.1/servidor.php'/>

   </port>

</service>

</definitions>

Continuação do codigo fonte do arquivo exemplo.wsdl

Page 32: Tópicos de Sistemas de Informação A

<?phpfunction getNome($codigo) {   if (!$codigo)            throw new SoapFault('Client','Parametro nao preenchido');

     // conecta ao Banco de Dados    $id = @pg_connect("dbname=samples user=postgres");    if (!$id)        throw new SoapFault("Server", "Conexao nao estabelecida");

    // realiza consulta ao Banco de Dados    $result = pg_query($id, "select * from clientes " .                            "where codigo=$codigo");     $matriz = pg_fetch_all($result);     if ($matriz == null)   throw new SoapFault("Server", "Cliente nao encontrado");    // retorna os dados.    return $matriz[0];}// instancia servidor SOAP$server = new SoapServer("exemplo.wsdl", array('encoding'=>'ISO 8859 1')); $server >addFunction("getNome"); $server >handle(); ?>

Codigo fonte do arquivo servidor.php

Page 33: Tópicos de Sistemas de Informação A

<?php

ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache

$client = new SoapClient("http://127.0.0.1/exemplo.wsdl",

array(

"trace" => 1,

"exceptions" => 1));

try {

print "<b>Funcoes do disponiveis<br></b><pre>";

print_r($client->__getFunctions());

print “</pre>

   // realiza chamada remota de método

   // $retorno = $client >getNome(3);

  // echo 'Código' . $retorno['codigo']   . '<br/>';

     // echo 'Nome’ . $retorno['nome']     . '<br/>';

} catch (SoapFault $exception) {

print "<pre>";

print_r($exception);

print "</pre>";

}

?>

Codigo fonte do arquivo cliente.php