Mini Curso Web Services com PHP

47
Minicurso Minicurso Web Services com PHP Web Services com PHP Vinícius Costa de Souza [email protected] http://www.inf.unisinos.br/~vinicius julho de 2005

description

 

Transcript of Mini Curso Web Services com PHP

Page 1: Mini Curso Web Services com PHP

Minicurso Minicurso Web Services com PHP Web Services com PHP

Vinícius Costa de [email protected]

http://www.inf.unisinos.br/~vinicius

julho de 2005

Page 2: Mini Curso Web Services com PHP

2

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Nome

Conhecimentos sobre Web Services

Conhecimentos sobre PHP

Expectativas referentes ao curso

ApresentaçõesApresentações

Page 3: Mini Curso Web Services com PHP

3

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

ProgramaPrograma

Introdução

Web Services O que são? Arquitetura Tecnologias

XML WSDL SOAP UDDI

Web Services com PHP

XML-RPC NuSOAP PEAR SOAP REST PHP Extension

Page 4: Mini Curso Web Services com PHP

4

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Por que surgiram os Web Services ?

Reutilização

Disponibilidade

Interoperabilidade

3.300 projetos em 2002

15,2 milhões de dólares até 2007

IntroduçãoIntrodução

Page 5: Mini Curso Web Services com PHP

5

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

WebWeb ServicesServices

Web Services são componentes de software que

independem de implementação ou de plataforma e

podem ser descritos, publicados e invocados sobre

uma rede através de mensagens padrão XML.

O que são?O que são?

Page 6: Mini Curso Web Services com PHP

6

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web ServicesWeb Services

interagir

publicarencontrar

Solicitante de

Serviços

Provedor de

Serviços

Registro de

Serviços

cliente

serviço

Descrição do serviço

Descrição do

serviço

ArquiteturaArquitetura

Page 7: Mini Curso Web Services com PHP

7

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web ServicesWeb ServicesTecnologiasTecnologias

Page 8: Mini Curso Web Services com PHP

8

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

TecnologiasTecnologias

No contexto de Web Services, a XML não é apenas utilizada como formato para troca de mensagens, mas também como a forma através da qual os serviços são definidos

Permite superar as limitações do HTML

Possibilita criar qualquer número de elementos (tags) com significado associado às informações

XMLXML

Page 9: Mini Curso Web Services com PHP

9

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

TecnologiasTecnologias

Através de XML esquemas é possível validar as informações separadamente e descrever os atributos e características dos dados

Duas partes só podem trocar informações em XML e entender os elementos da mesma forma se compartilharem uma mesma definição sobre quais e como os elementos podem ser utilizados

XMLXML

Page 10: Mini Curso Web Services com PHP

10

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

TecnologiasTecnologias A WSDL é a linguagem padrão XML utilizada para descrever interfaces de Web Services

A WSDL é dividida em três elementos principais:

definições de tipo de dados - determinam a estrutura e o conteúdo das mensagens.

operações abstratas - determinam as operações possíveis

protocolos de ligação - determinam as formas de transmissão das mensagens pela rede até os destinatários

WSDLWSDL

Page 11: Mini Curso Web Services com PHP

11

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

TecnologiasTecnologiasWSDLWSDL Camadas de descrição dos serviços

Page 12: Mini Curso Web Services com PHP

12

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

TecnologiasTecnologias O SOAP é um protocolo para troca de informações em ambiente descentralizado e distribuído que permite comunicação entre aplicações de forma simples e completamente independente de sistema operacional, linguagem de programação ou plataforma

A comunicação é realizada através de trocas de mensagens, transmitidas em formato XML, incluindo os parâmetros usados na chamada, bem como os dados de resultados.

Também pode ser utilizado para invocar, publicar e localizar Web Services no registro UDDI

SOAPSOAP

Page 13: Mini Curso Web Services com PHP

13

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

TecnologiasTecnologias

O SOAP pode ser utilizado em combinação com uma variedade de outros protocolos, como HTTP, SMTP, FTP, dentre outros. Também suporta Remote Procedure Call

O modelo de dados SOAP oferece definições para tipos de dados como string, integer, float, double e date

SOAPSOAP

Page 14: Mini Curso Web Services com PHP

14

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

TecnologiasTecnologias Um pacote SOAP possui as seguintes partes:

Envelope: define o início e o fim das mensagens, quem poderá tratá-las e se o tratamento é obrigatório ou opcional

Cabeçalho: contém atributos opcionais das mensagens

Corpo: contém os dados em XML

Anexo: consiste de um ou mais documentos anexados a mensagem principal

RPC: define como o modelo RPC (Remote Procedure call) interage com o SOAP, com o objetivo de invocar procedimentos em um sistema remoto.

Codificação: define como representar dados simples e complexos a serem transmitidos nas mensagens

SOAPSOAP

Page 15: Mini Curso Web Services com PHP

15

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

TecnologiasTecnologias Envelope, Cabeçalho e Corpo das mensagens SOAP

SOAPSOAP

Page 16: Mini Curso Web Services com PHP

16

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

TecnologiasTecnologias Invocação do serviço utilizando SOAP

SOAPSOAP

Page 17: Mini Curso Web Services com PHP

17

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

TecnologiasTecnologias

Para que um serviço seja utilizado é necessário que o cliente consiga localizá-lo, e esta localização pode ser feita através do UDDI, que é uma especificação técnica para descrever, descobrir e integrar Web Services

Para isso, existe um registro global público, chamado UDDI business registry, no qual toda a informação está disponível para consultas em geral. Entretanto, um registro privado pode adicionar controle de segurança para proteger os dados e prevenir acessos não autorizados

UDDIUDDI

Page 18: Mini Curso Web Services com PHP

18

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

TecnologiasTecnologias

UDDI utilizado para descobrir um Web Service

UDDIUDDI

Page 19: Mini Curso Web Services com PHP

19

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

XML-RPC

NuSOAP

PEAR SOAP

REST

SOAP Extension

PossibilidadesPossibilidades

Page 20: Mini Curso Web Services com PHP

20

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

Remote Procedure Calls – RPC são utilizadas para estabelecer e facilitar transações entre dois sistemas remotos

XML-RPC é uma implementação de RPC que possibilita o transporte de dados em XML entre dois servidores utilizando o protocolo HTTP

XML-RPC tollkit disponível em: http://sourceforge.net/projects/phpxmlrpc

Versão 1.1.1 de 30/06/2005

XML-RPCXML-RPC

Page 21: Mini Curso Web Services com PHP

21

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

Classes

xmlrpc_client – clientes

xmlrpc_server - servidores

xmlrpcmsg – requisições ao servidor

xmlrpcresp – respostas do servidor

xmlrpcval – encapsula valores para XML-RPC

Arquivos

xmlrpc.inc

xmlrpcs.inc

XML-RPCXML-RPC

Page 22: Mini Curso Web Services com PHP

22

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

xmlrpc_server.php

<?php include ("xmlrpc.inc"); include ("xmlrpcs.inc"); function CalculaICMS ($objeto){

$valor = $objeto->GetParam(0); $valor_escalar = $valor->scalarval(); $valorICMS = $valor_escalar * 1.5; return new xmlrpcresp (new xmlrpcval($valorICMS, "string"));

} $servidor = new xmlrpc_server (array("valorICMS.CalculaICMS"=>array("function"=>"CalculaICMS")));?>

XML-RPCXML-RPC

Page 23: Mini Curso Web Services com PHP

23

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

xmlrpc_client.php<?php

include ("xmlrpc.inc");$valor_nf = "15.000";

$format = new xmlrpcmsg('valorICMS.CalculaICMS', array(new xmlrpcval($valor_nf, "double")));

$client = new xmlrpc_client("xmlrpc_server.php", "localhost", 80);$request = $client->send($format);$resp = $request->value();

echo $value->scalarval();?>

XML-RPCXML-RPC

Page 24: Mini Curso Web Services com PHP

24

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHPExercíciosExercícios

1. Baixar as classes XML-RPC http://sourceforge.com

3. Baixar os exemplos xmlrpc_server.php e xmlrpc_client.php em www.inf.unisinos.br/~vinicius e testar. Simular alguns erros com e sem a opção de debug.

5. Criar um Web Service que recebe um nome (string) e retorna como resposta a frase “Olá nome!”.

Page 25: Mini Curso Web Services com PHP

25

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

PHP Extension and Application Repository

http://pear.php.net

Repositório de classes em PHP

Licença livre

Grande comunidade

PEAR SOAP Client/Server for PHP

implementação do protocolo SOAP e serviços

versão 0.9.1 Beta de 31/05/2005.

PEARPEAR

Page 26: Mini Curso Web Services com PHP

26

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHPPEARPEARpear-server1.php <?php

require_once 'SOAP/Server.php'; $server = new SOAP_Server; class SOAP_Example_Server { var $method_namespace = 'urn:SOAP_Example_Server'; function echoString($inputString) { return $inputString; } } $soapclass = new SOAP_Example_Server(); $server->addObjectMap($soapclass); $server->service($HTTP_RAW_POST_DATA);

?>

Page 27: Mini Curso Web Services com PHP

27

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHPPEARPEAR

pear-client1.php <?php

require_once 'SOAP/Client.php'; $soapclient = new SOAP_Client('http://localhost/pear-server1.php'); $result = $soapclient->call('echoStringSimple', array('inputString' => 'this is a test string'), array('namespace' => 'urn:SOAP_Example_Server');

?>

Page 28: Mini Curso Web Services com PHP

28

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

API desenvolvida em PHP

Permite a criação de clientes e servidores

Possui suporte embutido a WSDL.

Instalação simplificada

servidor Web com suporte a PHP

biblioteca de classes nusoap.php

http://sourceforge.ner/projects/nusoap

A última versão estável é a 0.7.0 de 3/6/2005

NuSOAPNuSOAP

Page 29: Mini Curso Web Services com PHP

29

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

nusoap_server1.php<?php // inclusão do arquivo de classes NuSOAP require_once('nusoap.php'); // criação de uma instância do servidor $server = new soap_server; // registro do método $server->register('hello'); // definição do método como uma função do PHP function hello($name) { return 'Hello '.$name;

}// requisição para uso do serviço$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';

$server->service($HTTP_RAW_POST_DATA);?>

NuSOAP NuSOAP (exemplo 1 – Hello World)

Page 30: Mini Curso Web Services com PHP

30

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

nusoap_client1.php<?php // inclusão do arquivo de classes NuSOAP require_once('nusoap.php');

// criação de uma instância do cliente $client = new soapclient('http://localhost/server1.php');

// chamada do método SOAP $result = $client->call('hello',array('V SDSL'));

// exibe o resultado print_r($result);?>

NuSOAP NuSOAP (exemplo 1 – Hello World)

Page 31: Mini Curso Web Services com PHP

31

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

nusoap_client2.php<?php

require_once('nusoap.php');

$client = new soapclient('http://localhost/server1.php');

// verifica se ocorreu erro na criação do objeto $err = $client->getError(); if ($err){ echo "<h2>Erro no construtor</h2><pre>".$err."</pre>"; } // chamada do método SOAP $result = $client->call('hello',array('V SDSL'));

// verifica se ocorreu falha na chamada do métodoif ($client->fault){

echo "<h2>Falha</h2><pre>"; print_r($result); echo "</pre>";

NuSOAP NuSOAP (exemplo 2 - debug)

Page 32: Mini Curso Web Services com PHP

32

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

}else{ // verifica se ocorreu erro na execução do método $err = $client->getError(); if ($err){ echo "<h2>Erro</h2><pre>".$err."</pre>"; }else{ // exibe o resultado echo "<h2>Result</h2><pre>".print_r($result)."</pre>";

} }

// exibe a requisição e a respostaecho '<h2>Requisição</h2>';echo '<pre>'.htmlspecialchars($client->request).'</pre>';echo '<h2>Resposta</h2>';echo '<pre>'.htmlspecialchars($client->response).'</pre>';

// Exibe mensagens para debug

echo '<h2>Debug</h2>';echo '<pre>'.htmlspecialchars($client->debug_str).'</pre>';

?>

NuSOAP NuSOAP (exemplo 2 - debug)

Page 33: Mini Curso Web Services com PHP

33

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

RequisiçãoPOST server1.php HTTP/1.0User-Agent: NuSOAP/0.6.7 (1.75)Host: localhostContent-Type: text/xml; charset=ISO-8859-1SOAPAction: ""Authorization: Basic dmluaWNpdXM6dW5pc2lub3M=Content-Length: 538

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:si="http://soapinterop.org/xsd"> <SOAP-ENV:Body> <ns1:hello xmlns:ns1="http://testuri.org"> <soapVal xsi:type="xsd:string">III SDSL</soapVal> </ns1:hello> </SOAP-ENV:Body></SOAP-ENV:Envelope>

NuSOAP NuSOAP (exemplo 2 - debug)

Page 34: Mini Curso Web Services com PHP

34

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

server2.php<?php

require_once('nusoap.php');$server = new soap_server;

// inicializa o suporte a WSDL $server->configureWSDL('server2','urn:server2');

$server->wsdl->schemaTargetNamespace = 'urn:server2'; // registra o método a ser oferecido $server->register('hello', //nome do método array('name' => 'xsd:string'), //parâmetros de entrada array('return' => 'xsd:string'), //parâmetros de saída 'urn:server2', //namespace 'urn:server2#hello', //soapaction 'rpc', //style 'encoded', //use 'Says hello to the caller' //documentação do WS ); ...

NuSOAP NuSOAP (exemplo 3 - WSDL)

Page 35: Mini Curso Web Services com PHP

35

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

Page 36: Mini Curso Web Services com PHP

36

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

1. Baixar as classes do NuSOAP http://sourceforge.net

Baixar e testar os três exemplos apresentados http://www.inf.unisinos.br/~vinicius

2. Alterar o nusoap-server2.php para que o mesmo forneça um novo serviço além do hello. Este novo serviço deve ser chamado de Media e deve receber como parâmetros de entrada dois números reais (num1 e num2) e retornar como saída um parâmetro (resultado), que deve ser o resultado do cálculo da média entre os dois números.

3. Criar um cliente para acessar o novo serviço implementado

ExercíciosExercícios

Page 37: Mini Curso Web Services com PHP

37

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

1. Criar um cliente para acessar um Web Service disponibilizado pela Amazon.com através da API NuSOAP

O web service disponibilizado pela Amazon (http://soap.amazon.com) permite a realização de consultas em sua base de dados. Dessa forma, podemos incluir fomulários para pesquisas na Amazon em nossos próprios sites.

ExercíciosExercícios

Page 38: Mini Curso Web Services com PHP

38

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

1. URL para acesso ao serviço da Amazon.comhttp://soap.amazon.com/schemas3/AmazonWebServices.wsdl

2. Parâmetros a serem passados 'keyword' => $palavra,

'page' => $pagina, 'mode' => 'books', 'tag' => 'melonfire-20', 'sort' => '+pmrank', 'type' => 'lite', 'devtag' => 'YOUR-TOKEN-HERE‘

3. Nome do método a ser chamado KeywordSearchRequest

4. Retorno$result['Details'];$result['TotalResults'];

DicasDicas

5. Array Details 'Url‘ 'ImageUrlSmall' 'ProductName‘ 'Authors‘ 'OurPrice'

Page 39: Mini Curso Web Services com PHP

39

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

O REST difere bastante do SOAP e do XML-RPC.

não é um padrão

não existem classes pré-construídas

não exige nenhuma extensão especial ou biblioteca de classes

O protocolo HTTP faz o envio e recebimento de mensagens padrão XML.

uso de métodos padrão HTTP como o GET, POST e PUT para enviar e recuperar dados XML.

Necessário utilizar ferramentas como PHP DOM, SAX, ou também XSL para fazer o parsing.

Web Services com PHPWeb Services com PHPRESTREST

Page 40: Mini Curso Web Services com PHP

40

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHPRESTREST

rest-server.php <?php // obtém o valor do parâmetro passado. $amount = $_GET["amount"]; // efetua o cálculo do imposto

$taxcalc = $amount*0.15; // monta o XML de resposta echo "<?xml version=\"1.0\"?>";

echo "<taxinfo>"; echo "<result>".$taxcalc."</result>"; echo "</taxinfo>";

?>

Page 41: Mini Curso Web Services com PHP

41

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHPRESTRESTrest-client.php <?php $rs = "http://localhost/rest-server.php"; $qs = ""; $param = array('amount' => "15.00"); foreach($param as $key=>$value){ $qs = $qs."$key=".urlencode($value)."&"; } $url = "$rs?$qs"; $xml = file_get_contents($url); echo $xml; ?>

Page 42: Mini Curso Web Services com PHP

42

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

A extensão SOAP do PHP 5 é a primeira implementação do protocolo SOAP para PHP em C

Possui algumas vantagens em relação a outras implementações escritas em PHP, sendo a principal delas a velocidade.

Essa extensão, ainda definida como experimental, pode ser utilizada para implementar servidores e clientes SOAP com suporte a SOAP 1.1, SOAP 1.2 e WSDL 1.1.

Possui uma série de funções pré-definidas

Web Services com PHPWeb Services com PHPSOAP ExtensionSOAP Extension

Page 43: Mini Curso Web Services com PHP

43

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHPSOAP ExtensionSOAP Extension

soap-server1.php <?php

//criação de uma instância do servidor $server = new SoapServer(null, array('uri' => "http://localhost/ws/")); //definição do serviço function helloWorld($name) { return "Hello ".$name; } //registro do serviço $server->addFunction("helloWorld"); //chamada do método para atender as requisição do serviço $server->handle();

?>

Page 44: Mini Curso Web Services com PHP

44

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHPSOAP ExtensionSOAP Extension

soap-client1.php <?php // criação de uma instância do cliente $client = new SoapClient(null, array(

'location' => 'http://localhost/ws/soap-server1.php', 'uri' => 'http://localhost/ws/', 'trace' => 1);

// chamada do serviço SOAP $result = $client->helloWorld('Vinícius'); // verifica erros na execução do serviço e exibe o resultado if (is_soap_fault($result)){

trigger_error("SOAP Fault: (faultcode: {$result->faultcode}, faultstring: {$result->faulstring})", E_ERROR);

}else{ print_r($result); } ?>

Page 45: Mini Curso Web Services com PHP

45

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

Web Services com PHPWeb Services com PHP

1. Implementar e testar o exemplo

ExercícioExercício

Page 46: Mini Curso Web Services com PHP

46

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

ReferênciasReferências

http://www.w3.org/2002/ws/ W3C - Web Services Activity

http://sourceforge.net/projects/nusoap/ NuSOAP project page

http://www.xmlrpc.com Site oficial do XML-RPC

http://pear.php.net/package/SOAP SOAP Package

http://br.php.net/manual/pt_BR/ref.soap.phpSite oficial do PHP

http://www.w3.org/TR/soap/SOAP

http://www.w3.org/TR/wsdlWSDL 

http://www.w3.org/XML/XML 

http://www.uddi.org/ UDDI

Page 47: Mini Curso Web Services com PHP

47

Web Services com PHP

Vinícius Costa de Souza - Julho de 2005 /

OBRIGADO!OBRIGADO!

Vinícius Costa de [email protected]

www.inf.unsinos.br/~vinicius

São Leopoldo, julho de 2005