Você está na página 1de 33

XML WEB Services

Arquitectura de Sistemas
DEI-ISEP

Web Services
A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP messages, typically conveyed using HTTP with an XML serialization in conjunction with other Webrelated standards.
Fonte:http://www.w3.org/TR/2004/NOTE-ws-arch-20040211

Web Services
Um cenrio de utilizao

Um cenrio de utilizao

Web Services
Um Web Service um bloco de software que pode ser acedido pela Internet e usado remotamente por outras aplicaes

Infra-estrutura para a comunicao entre aplicaes

Web Services
Antecedentes
DCOM Distributed Component Object Model CORBA -Common Object Request Broker Architecture Java RMI Remote Method Invocation Problemas de interoperabilbidade Orientados ligao Dependentes da plataforma

Web Services
Caractersticas de um Web Service
Expe funcionalidades de programao na Web servio So acedidos usando protocolos standard - HTTP Comunicam por meio de mensagens Simple Object Usam XML para codificar as mensagens Access Protocol Estruturam as mensagens usando o protocolo SOAP Web Services Description Language So auto-descritivos permitindo a um cliente facilmente comunicar com o servio - WSDL Universal Description, Discovery and Integration So servios que podem ser registados e facilmente descobertos UDDI Independentes de plataformas, linguagens de
programao e sistemas operativos
6

Arquitectura de um Web Service


Service-Oriented Architecture + Web = Web Services Fornecedor do servio - Implementa o servio, define as funcionalidades a desenvolver e disponibiliza o servio na Internet. Cliente do servio - Qualquer aplicao que usa o servio. Faz chamada remota ao fornecedor do servio criando uma conexo e enviando um pedido Registo do servio - um directrio de servios logicamente centralizado. Fornece um lugar para registar os servios e definir mecanismo simples 7 de publicao/descoberta desses servios.

Web Services
Arquitectura baseada em SOAP, WSDL e UDDI

Fonte:Introduction to Web Services by Philippe Le Hgaret w3c.org


8

Camadas de Protocolos
Servio de transporte - responsvel pelo
transporte das mensagens entre aplicaes. HTTP, SMTP, FTP Mensagens XML - responsvel pela codificao das mensagens num formato XML, de modo a serem facilmente interpretadas pelas aplicaes. XML-RPC e SOAP Descrio do servio - responsvel pela descrio da interface publica do servio, implementada atravs do protocolo WSDL Descoberta do Servio - responsvel pela centralizao dos servios, simplificando a sua publicao/descoberta - UDDI
9

Camadas de Protocolos
Descoberta UDDI

Descrio

WSDL

Mensagens XML Transporte

SOAP, XML-RPC HTTP SMTP FTP

10

SOAP Simple Object Access Protocol

11

SOAP
SOAP Version 1.2 (SOAP) is a lightweight protocol intended for exchanging structured information in a decentralized, distributed environment. It uses XML technologies to define an extensible messaging framework providing a message construct that can be exchanged over a variety of underlying protocols. The framework has been designed to be independent of any particular programming model and other implementation specific semantics.
[SOAP Version 1.2 Part 1: Messaging Framework ] http://www.w3.org/TR/2003/REC-soap12-part1-20030624/
12

SOAP
SOAP um protocolo, baseado em XML, para troca de mensagens entre aplicaes

Define:
A estrutura das mensagens Um modelo de processamento que descreve como as mensagens devem ser processadas pelo servio.

13

SOAP
Template de uma mensagem SOAP:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envel ope/"> <soap:Header> <!-- optional --> <!-- header blocks go here... --> </soap:Header> <soap:Body> <!-- payload or Fault element goes here... --> </soap:Body> </soap:Envelope>
14

SOAP
<soap:Envelope>
Elemento raiz de uma mensagem SOAP. Contm um Header opcional e um Body obrigatrio <soap:Header> usado para codificar informao adicional da mensagem header blocks <soap:Body> contm o contedo principal da mensagem a enviar e deve ser um documento XML vlido.

<soap:Fault>
trata os erros de um modo centralizado, permitindo ao servidor comunicar ao cliente os erros encontrados no processamento da mensagem
15

Mensagem SOAP .Net


[WebMethod ] public int Add(int x, int y) {return x+y;}

Codificao da chamada Add(3,5)


<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Add xmlns="http://w2kslosaw/DemoService/"> <x>3</x> <y>5</y> </Add> </soap:Body> </soap:Envelope>
16

Mensagem SOAP .Net


Codificao da Resposta
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <AddResponse xmlns="http://w2kslosaw/helloworld/"> <AddResult> 8 </AddResult> </AddResponse> </soap:Body> </soap:Envelope>

17

SOAP Protocol Binding


Para alm da codificao da mensagem em SOAP necessrio definir como a mensagem ser enviada. Uma da grandes vantagens do SOAP que no est ligado a nenhum protocolo particular. As mensagens SOAP podem ser enviadas por qualquer protocolo que possa transmitir XML A especificao SOAP define apenas um protocol binding enviar mensagens SOAP via HTTP POST

18

SOAP Protocol Binding


Exemplo de um mensagem SOAP: pedido HTTP com uma

POST /losaw/dir1/demoservice.asmx HTTP/1.1 Host: w2ks Request Content-Type: text/xml; charset=utf-8 Content-Length: 312 SOAPAction: "http://w2kslosaw/helloworld/Add" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Add xmlns="http://w2kslosaw/helloworld/"> <x>3</x> <y>5</y> </Add> </soap:Body> 19 </soap:Envelope>

10

SOAP Protocol Binding


Exemplo de resposta HTTP com mensagem SOAP:
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Response Content-Length: 100 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <AddResponse xmlns="http://w2kslosaw/helloworld/"> <AddResult>8</AddResult> </AddResponse> </soap:Body> </soap:Envelope>
20

Camadas de Protocolos
Descoberta UDDI

Descrio

WSDL

Mensagens XML Transporte

SOAP,XML-RPC HTTPSMTP FTP

21

11

Web Service
WSDL Web Service Description Language

22

WSDL
WSDL is an XML format for describing network services as a set of endpoints operating on messages containing either document-oriented or procedure-oriented information. The operations and messages are described abstractly, and then bound to a concrete network protocol and message format to define an endpoint. Related concrete endpoints are combined into abstract endpoints (services). WSDL is extensible to allow description of endpoints and their messages regardless of what message formats or network protocols are used to communicate.
[Web Services Description Language (WSDL) 1.1 ] http://www.w3.org/TR/2001/NOTE-wsdl-20010315
23

12

WSDL - Web Service Description Language


WSDL uma especificao para descrever um Web Service num vocabulrio XML WSDL um documento XML para descrever: :
A interface pblica descrevendo todas as funes disponibilizadas pelo servio A informao dos tipos de dados para as mensagens de chamada/resposta dos servios A informao sobre o protocolo de transporte a usar A informao sobre a localizao do servio
WSDL representa um contracto entre o cliente do servio e o fornecedor do servio
24

WSDL - Web Service Description Language

Estrutura de um documento WSDL


<definitions> o elemento raz do documento WSDL <types> especifica o tipo de dados usados no servio, que sero referenciados pelas mensagens <message> especifica as mensagens do servio <definitions> Root operation>( <portType> especifica as <operation> interface) do operation> <types> Que dados? servio formato das mensagens e um <binding> especifica o <message> Que mensagens? protocolo de transporte <service> especifica a <portType> Que operaes? localizao para invocar o servio <port>
<service> Onde est o servio?
25

<binding> Que formato e transporte?

13

WSDL - Web Service Description Language


Definitions

o elemento raz de um documento WSDL. O atributo targetNamespace permite definir um namespace e o atributo xmlns permite referenciar outos namespaces
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/ http: definitions http //schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/ http: http //schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema http: org/2001/XMLSchema" 2001/XMLSchema http //www. xmlns:s0="http://w2kslosaw/addservice/ http: http //w2kslosaw/addservice/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/ http: http //schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/ http: http //microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/ http: http //schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://w2kslosaw/addservice/ http: http //w2kslosaw/addservice/" xmlns="http://schemas.xmlsoap.org/wsdl/"> http://schemas.xmlsoap.org/wsdl/ http

26

WSDL - Web Service Description Language


<types>
Contm declaraes de tipos de dados referenciadas pelas mensagens um Schema embebido no documento. element Add (Chamada do servio)
<types> <s:schema elementFormDefault="qualified" [WebMethod ] targetNamespace="http://w2kslosaw/addservice/"> int Add(int x, int y) public <s:element name="Add"> {return x+y;} <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="x" type="s:int" /> <s:element minOccurs="1" maxOccurs="1" name="y" type="s:int" /> </s:sequence> </s:complexType> 27 </s:element>

Add

14

WSDL
<types>
element AddResponse (tipo de dados da resposta)

<s:element name="AddResponse"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="AddResult" type="s:int" /> </s:sequence> </s:complexType> </s:element>

28

WSDL - Web Service Description Language


<message>
Uma descrio abstracta das mensagens entre o cliente e o servidor. Cada mensagem contm uma ou mais <part> que descrevem um item a ser enviado ou recebido Um element part tem um atributo element ou type
<message name="AddSoapIn"> <part name="parameters" element="s0:Add" /> </message> Referncia a types <message name="AddSoapOut"> <part name="parameters" element="s0:AddResponse" /> </message>
29

Input

Output

15

WSDL - Web Service Description Language


<message name="AddSoapIn"> <part name="parameters" element="s0:Add" /> </message>
<types> <s:element name="Add"> <s:element minOccurs="1" maxOccurs="1" name="x" type="s:int" /> <s:element minOccurs="1" maxOccurs="1" name="y" type="s:int" /> </s:sequence> </s:complexType> </s:element>
<soap:Body> <Add xmlns="http://w2kslosaw/DemoService/"> <x>3</x> <y>5</y> Request </Add> </soap:Body>
30

<message name="AddSoapOut"> <part name="parameters" element="s0:AddResponse" /> </message>


<s:element name="AddResponse"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="AddResult type="s:int" /> </s:sequence> </s:complexType> </s:element> <soap:Body> <AddResponse xmlns="http://tempuri.org/"> <AddResult>int</AddResult> </AddResponse> </soap:Body>

Response

31

16

WSDL - Web Service Description Language


<portType> (Interfaces)
Define um grupo de <operation> relacionadas, isto uma interface para o servio. Cada operao constituda por combinaes de elementos input e output (e fault opcional) dependendo do padro da mensagem (Message Exchange Pattern)

<portType name="DemoServiceSoap"> <operation name="Add"> <input message="s0:AddSoapIn" /> <output message="s0:AddSoapOut" /> </operation> </portType> <message name="AddSoapIn"> <part name="parameters" element="s0:Add" /> </message>
32

WSDL - Web Service Description Language

Message Exchange pattern

33

17

WSDL - Web Service Description Language


<binding>
portType, com um dado protocolo.
Descreve os detalhes concretos da utilizao de um determinado Define o formato das mensagens e os detalhes do protocolo. Especifica como criar um envelope SOAP para uma operation
Referncia ao portType <binding name="DemoServiceSoap type="s0:DemoServiceSoap"> <soap:binding style="document" transport=http://schemas.xmlsoap.org/soap/http /> <operation name="Add"> <soap:operation style="document" soapAction="http://w2kslosaw/addservice/Add" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> </binding> 34

WSDL - Web Service Description Language

<soap:binding>
binding atravs de SOAP transport

define o protocolo de transporte

transport=http://schemas.xmlsoap.org/soap/http

35

18

WSDL - Web Service Description Language


<soap:binding>
<soap:operation style="document" soapAction="http://w2kslosaw/addservice/Add" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <soap:operation>
define a forma como feito o binding de determinada operao

<soapAction>
define cabealho http SOAPACTION

<soap:body> define a codificao da mensagem no body do SOAP use="literal"

36

WSDL - Web Service Description Language <service>


O elemento service define um ou mais elementos port ( ponto de acesso). Um elemento <port> usado para especificar um endereo do Web Service com referncia a um determinado binding.
<service name="DemoService"> Referncia ao binding <port name="DemoServiceSoap" binding="s0:DemoServiceSoap"> <soap:address location="http://w2ks/losaw/dir1/demoservice.asmx" /> </port> </service>

37

19

Web Services
Universal Description, Discovery and Integration

39

20

UDDI
Um registo de servios
UDDI Business registry

Um local para descobrir servios e informao detalhado sobre o servio WSDL, etc Classificar, catalogar e gerir Web services Seleco dinmica da implementao de um servio em Runtime Criado inicialmente por Microsoft, IBM e Ariba
40

UDDI
Repositrios UDDi de teste
http://test.uddi.microsoft.com/ https://uddi.ibm.com/testregistry/registry.html http://udditest.sap.com

Replicao da informao nos repositrios Registo da informao


White pages identificao da empresa Yellow pages classificao do servio Green pages informao tcnica sobre o servio

41

21

UDDI
UDDI Programmers APIs
Inquiry API Set Publication API Set Security Policy API Set Subscription API Set Value Set API Set

Implementaes
Microsoft UDDI SDK IBM UDDI4J Java API for XML Registry JAXR WASP UDDI
42

ASP.NET Web Services

Implementao de web Services Exemplos


1 Criar Web Service .Net bsico 2 Criar Cliente do servio 3 Criar cliente para o servio na mquina dot
http://dot.dei.isep.ipp.pt/losa/aula7/WebServiceSomar.asmx

43

22

ASP.NET Web Services


Criar Servio
New Web Site -> ASP.NET Web Service

Servio criado na mquina dot http://dot.dei.isep.ipp.pt/losa/WS1/WebServiceSomar.asmx


44

ASP.NET Web Services


Cdigo do servio WebServiceSomar.cs
[WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo =WsiProfiles.BasicProfile1_1)] public class WebServiceSomar :System.Web.Services.WebService{ public WebServiceSomar() {} [WebMethod] // mtodo do servio public int Somar(int x, int y) { return x + y; } } Atributo [WebMethod] expe o mtodo pblico como mtodo do servio
45

23

ASP.NET Web Services


Teste do servio
http://dot.dei.isep.ipp.pt/losa/WS1/WebServiceSomar.asmx

46

ASP.NET Web Services


Criar cliente do servio
O cliente pode ser qualquer tipo de aplicao: Windows, Console Application, Web Exemplo com Web Application Add Web Reference no projecto

47

24

ASP.NET Web Services


Namespace e Ficheiros gerados

48

ASP.NET Web Services


Cdigo do cliente do servio
int x = 5; int y = 7; //criar objecto proxy para chamar o servio WebServiceSomar proxy = new WebServiceSomar(); // chamar o mtodo do servio int result=proxy.Somar( x, y);

A classe proxy WebServiceSomar criada atravs da descrio do servio no ficheiro: WebServiceSomar.wsdl

49

25

ASP.NET Web Services


Classe WebServiceSomar(proxy) no cliente responsvel pela chamada do servio Acrescentando ao projecto um class diagram permite ver o cdigo da classe, gerada pela framework. Class View para ver o cdigo

50

ASP.NET Web Services


Class WebServiceSomar no cliente (proxy)
public partial class WebServiceSomar : System.Web.Services.Protocols.SoapHttpClientProtocol{ private System.Threading.SendOrPostCallback. SomarOperationCompleted; /// <remarks/> public WebServiceSomar() { string urlSetting = System.Configuration.ConfigurationManager. AppSettings["pt.ipp.isep.dei.dot.WebServiceSomar"]; if ((urlSetting != null)) { this.Url = urlSetting; } else { this.Url = "http://dot.dei.isep.ipp.pt/losa/WS1/WebServiceSomar.asmx"; }}

26

Mtodo Somar no cliente


[System.Web.Services.Protocols.SoapDocumentMethodAttribute("h ttp://tempuri.org/Somar", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterS tyle.Wrapped)] public int Somar(int x, int y) { object[] results = this.Invoke("Somar", new object[] { x, y}); return ((int)(results[0])) } Mtodo Invoque chama o servio, passando um array com os parmetros

52

Web Services .Net


Framework .Net para Web Service

Fonte: Anatomy of an XML Web Service Lifetime - .NET Framework Developer's Guide
53

27

Web Services .Net


Passos num Web Services
O cliente chama um mtodo do servio A plataforma no cliente serialize os argumentos do mtodo numa mensagem SOAP e envia a mensagem atravs da rede usando o protocolo HTTP para o computador onde reside o servio Web O servio Web recebe a mensagem SOAP e deserialize o XML recebido. Cria uma instncia da classe que implementa o servio e invoca o mtodo do servio. O servio executa o cdigo e serialize o resultado enviando uma mensagem de resposta para o cliente O cliente deserialize a mensagem ...

54

Web Services .Net


Devolver objectos num mtodo do Web Service
Implementar Struct/Class do objecto que se vai devolver Implementar propriedades para os atributos
public class Pessoa { String _nome; int _idade; public string Nome{ set { _nome=value;} get { return _nome;} } public int Idade{ set{ _idade = value;} get{ return _idade;} }

55

28

Web Services .Net


Instanciar objecto
// ler dados da base de dados , ou de

Pessoa p= new Pessoa(nome,idade);

Implementar mtodo do servio


[WebMethod]

public Pessoa getPessoaByID(int id) { // devolver objecto return p; }


56

Web Services .Net


Schema gerado no Wsdl
<s:element name="getPessoaByID"> <s:complexType><s:sequence> <s:element minOccurs="1" maxOccurs="1" </s:sequence></s:complexType> </s:element> <s:element name="getPessoaByIDResponse"> <s:complexType><s:sequence> <s:element minOccurs="0" maxOccurs="1" name="getPessoaByIDResult" </s:sequence></s:complexType> </s:element> <s:complexType name="Pessoa"> <s:sequence> <s:element minOccurs="0" maxOccurs="1" <s:element minOccurs="1" maxOccurs="1" </s:sequence>

name="i" type="s:int" />

type="tns:Pessoa" />

name="Nome" type="s:string/> name="Idade" type="s:int" />


57

29

Web Services .Net


Teste de chamada do servio
WSNetReturnObject ws = new WSNetReturnObject(); Pessoa p = ws. getPessoaByID(0); lblInfo.Text = p.Nome + "," + p.Idade.ToString();

No cliente gerada uma classe ( proxy) Pessoa

58

Web Services .Net


class proxy Pessoa gerada no cliente
public partial class Pessoa { private string nomeField; private int idadeField; public string Nome { get {return this.nomeField;} set {this.nomeField = value;} } public int Idade { get {return this.idadeField;} set {this.idadeField = value;} }
59

30

PHP Web Services


PHP Web Services bsico API j includa na linguagem Principais classes SoapClient
Usada para consumir (invocar) Web Services

SoapServer
Usada para criar um servio Web, especificar as suas Operaes a partir de um WSDL que especifica o servio.

SoapFault
Usado para definir respostas de erro na chamada do servio

60

PHP Web Services


Criar um cliente de um Web Service (weather service) 1. Soap Client class
$client= new SoapClient ('http://www.webservicex.com/globalweather.asmx?WSDL')
2.

Definir argumentos do mtodo a chamar (array associativo)


$params = array('CityName'=>'Porto', 'CountryName'=>'Portugal);

3.

4.

Invocar o mtodo do servio $result=$client->GetWeather($params); Ver resultado echo $result->GetWeatherResult;


http://phpdev.dei.isep.ipp.pt/losa/ClientWeatherService.php
61

31

PHP Web Services


Criar Web Service
Definir operaes ( mtodos do servio)
function getCatalogEntry($catalogId) { if($catalogId=='catalog1') // return de uma string HTML

Criar object SoapServer e especificar WSDL do servio


$server = new SoapServer("catalog.wsdl");

Especificar/Expor mtodo do servio


$server->addFunction("getCatalogEntry");

Tratar pedido SOAP


$server->handle();

62

PHP Web Services


Links Asp.Net Web Services
Walkthrough: Creating and Using an ASP.NET Web Service in Visual Web Developer
http://msdn.microsoft.com/enus/library/8wbhsy70(VS.80).aspx#Mtps_DropDownFilterText WSDL do Global Weather Service
http://www.webservicex.net/globalweather.asmx

Custo de envio de encomendas pelos CTT


http://webservices.tekever.eu/ctt/index.php

Sites com Web Services


http://www.xmethods.net/ve2/index.po

63

32

Links PHP e PHP Web Services


WsO2 Web Services Framework for PHP
http://wso2.org/projects/wsf/php

Entre muitas outras, tem uma ferramenta para gerar o cdigo PHP a partir do WSDL - wsdl2php e tambm php2wdsl

PHP classes - PHP WSDL Generator


http://www.phpclasses.org/browse/package/3509.html

PHP web Services


http://pt.php.net/manual/en/refs.webservice.php

Frameworks PHP
Zend Framework Cake PHP
Notes on Choosing a PHP Framework:
64

33

Você também pode gostar