Upload
elliando-dias
View
26.566
Download
7
Embed Size (px)
DESCRIPTION
Citation preview
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
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
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
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
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?
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
7
Web Services com PHP
Vinícius Costa de Souza - Julho de 2005 /
Web ServicesWeb ServicesTecnologiasTecnologias
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
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
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
11
Web Services com PHP
Vinícius Costa de Souza - Julho de 2005 /
TecnologiasTecnologiasWSDLWSDL Camadas de descrição dos serviços
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
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
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
15
Web Services com PHP
Vinícius Costa de Souza - Julho de 2005 /
TecnologiasTecnologias Envelope, Cabeçalho e Corpo das mensagens SOAP
SOAPSOAP
16
Web Services com PHP
Vinícius Costa de Souza - Julho de 2005 /
TecnologiasTecnologias Invocação do serviço utilizando SOAP
SOAPSOAP
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
18
Web Services com PHP
Vinícius Costa de Souza - Julho de 2005 /
TecnologiasTecnologias
UDDI utilizado para descobrir um Web Service
UDDIUDDI
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
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
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
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
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
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!”.
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
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);
?>
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');
?>
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
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)
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)
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)
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)
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)
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)
35
Web Services com PHP
Vinícius Costa de Souza - Julho de 2005 /
Web Services com PHPWeb 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
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
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'
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
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>";
?>
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; ?>
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
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();
?>
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); } ?>
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
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
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