Mini Curso Web Services com PHP

  • 24,486 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
24,486
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
845
Comments
2
Likes
15

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Minicurso Web Services com PHP Vinícius Costa de Souza viniciuscs@unisinos.br http://www.inf.unisinos.br/~vinicius julho de 2005
  • 2. Web Services com PHP Apresentações  Nome  Conhecimentos sobre Web Services  Conhecimentos sobre PHP  Expectativas referentes ao curso Vinícius Costa de Souza - Julho de 2005 / 2
  • 3. Web Services com PHP Programa  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 Vinícius Costa de Souza - Julho de 2005 / 3
  • 4. Web Services com PHP Introdução  Por que surgiram os Web Services ?  Reutilização  Disponibilidade  Interoperabilidade  3.300 projetos em 2002  15,2 milhões de dólares até 2007 Vinícius Costa de Souza - Julho de 2005 / 4
  • 5. Web Services com PHP Web Services O que são? 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. Vinícius Costa de Souza - Julho de 2005 / 5
  • 6. Web Services com PHP Web Services Arquitetura Registro Descriçã de o do Serviços serviço encontrar publicar serviço Solicitante cliente Provedor de de Serviços interagir Descrição Serviços do serviço Vinícius Costa de Souza - Julho de 2005 / 6
  • 7. Web Services com PHP Web Services Tecnologias Vinícius Costa de Souza - Julho de 2005 / 7
  • 8. Web Services com PHP Tecnologias XML  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 Vinícius Costa de Souza - Julho de 2005 / 8
  • 9. Web Services com PHP Tecnologias XML  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 Vinícius Costa de Souza - Julho de 2005 / 9
  • 10. Web Services com PHP Tecnologias WSDL  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 Vinícius Costa de Souza - Julho de 2005 / 10
  • 11. Web Services com PHP Tecnologias WSDL  Camadas de descrição dos serviços Vinícius Costa de Souza - Julho de 2005 / 11
  • 12. Web Services com PHP Tecnologias SOAP  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 Vinícius Costa de Souza - Julho de 2005 / 12
  • 13. Web Services com PHP Tecnologias SOAP  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 Vinícius Costa de Souza - Julho de 2005 / 13
  • 14. Web Services com PHP Tecnologias SOAP 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 Vinícius Costa de Souza - Julho de 2005 / 14
  • 15. Web Services com PHP Tecnologias SOAP  Envelope, Cabeçalho e Corpo das mensagens SOAP Vinícius Costa de Souza - Julho de 2005 / 15
  • 16. Web Services com PHP Tecnologias SOAP Invocação do serviço utilizando SOAP Vinícius Costa de Souza - Julho de 2005 / 16
  • 17. Web Services com PHP Tecnologias UDDI  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 Vinícius Costa de Souza - Julho de 2005 / 17
  • 18. Web Services com PHP Tecnologias UDDI UDDI utilizado para descobrir um Web Service Vinícius Costa de Souza - Julho de 2005 / 18
  • 19. Web Services com PHP Web Services com PHP Possibilidades  XML-RPC  NuSOAP  PEAR SOAP  REST  SOAP Extension Vinícius Costa de Souza - Julho de 2005 / 19
  • 20. Web Services com PHP Web Services com PHP XML-RPC  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 Vinícius Costa de Souza - Julho de 2005 / 20
  • 21. Web Services com PHP Web Services com PHP XML-RPC 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 Vinícius Costa de Souza - Julho de 2005 / 21
  • 22. Web Services com PHP Web Services com PHP XML-RPC 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"))); ?> Vinícius Costa de Souza - Julho de 2005 / 22
  • 23. Web Services com PHP Web Services com PHP XML-RPC 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(); ?> Vinícius Costa de Souza - Julho de 2005 / 23
  • 24. Web Services com PHP Web Services com PHP Exercí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!”. Vinícius Costa de Souza - Julho de 2005 / 24
  • 25. Web Services com PHP Web Services com PHP PEAR  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. Vinícius Costa de Souza - Julho de 2005 / 25
  • 26. Web Services com PHP Web Services com PHP PEAR pear-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); ?> Vinícius Costa de Souza - Julho de 2005 / 26
  • 27. Web Services com PHP Web Services com PHP PEAR 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'); ?> Vinícius Costa de Souza - Julho de 2005 / 27
  • 28. Web Services com PHP Web Services com PHP NuSOAP  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 Vinícius Costa de Souza - Julho de 2005 / 28
  • 29. Web Services com PHP Web Services com PHP NuSOAP (exemplo 1 – Hello World) 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); ?> Vinícius Costa de Souza - Julho de 2005 / 29
  • 30. Web Services com PHP Web Services com PHP NuSOAP (exemplo 1 – Hello World) 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); ?> Vinícius Costa de Souza - Julho de 2005 / 30
  • 31. Web Services com PHP Web Services com PHP NuSOAP (exemplo 2 - debug) 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étodo if ($client->fault){ echo "<h2>Falha</h2><pre>"; print_r($result); echo "</pre>"; Vinícius Costa de Souza - Julho de 2005 / 31
  • 32. Web Services com PHP Web Services com PHP NuSOAP (exemplo 2 - debug) }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 resposta echo '<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>' ?> Vinícius Costa de Souza - Julho de 2005 / 32
  • 33. Web Services com PHP Web Services com PHP NuSOAP (exemplo 2 - debug) Requisição POST server1.php HTTP/1.0 User-Agent: NuSOAP/0.6.7 (1.75) Host: localhost Content-Type: text/xml; charset=ISO-8859-1 SOAPAction: "" 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> Vinícius Costa de Souza - Julho de 2005 / 33
  • 34. Web Services com PHP Web Services com PHP NuSOAP (exemplo 3 - WSDL) 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 ); ... Vinícius Costa de Souza - Julho de 2005 / 34
  • 35. Web Services com PHP Web Services com PHP Vinícius Costa de Souza - Julho de 2005 / 35
  • 36. Web Services com PHP Web Services com PHP Exercícios 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 Vinícius Costa de Souza - Julho de 2005 / 36
  • 37. Web Services com PHP Web Services com PHP Exercícios 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. Vinícius Costa de Souza - Julho de 2005 / 37
  • 38. Web Services com PHP Web Services com PHP Dicas 1. URL para acesso ao serviço da Amazon.com http://soap.amazon.com/schemas3/AmazonWebServices.wsdl 2. Parâmetros a serem passados 5. Array Details 'keyword' => $palavra, 'Url‘ 'page' => $pagina, 'ImageUrlSmall' 'mode' => 'books', 'ProductName‘ 'tag' => 'melonfire-20', 'Authors‘ 'sort' => '+pmrank', 'OurPrice' 'type' => 'lite', 'devtag' => 'YOUR-TOKEN-HERE‘ 3. Nome do método a ser chamado KeywordSearchRequest 4. Retorno $result['Details']; $result['TotalResults']; Vinícius Costa de Souza - Julho de 2005 / 38
  • 39. Web Services com PHP Web Services com PHP REST  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. Vinícius Costa de Souza - Julho de 2005 / 39
  • 40. Web Services com PHP Web Services com PHP REST 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>"; ?> Vinícius Costa de Souza - Julho de 2005 / 40
  • 41. Web Services com PHP Web Services com PHP REST rest-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; ?> Vinícius Costa de Souza - Julho de 2005 / 41
  • 42. Web Services com PHP Web Services com PHP SOAP Extension  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 Vinícius Costa de Souza - Julho de 2005 / 42
  • 43. Web Services com PHP Web Services com PHP SOAP 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(); ?> Vinícius Costa de Souza - Julho de 2005 / 43
  • 44. Web Services com PHP Web Services com PHP SOAP 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); } ?> Vinícius Costa de Souza - Julho de 2005 / 44
  • 45. Web Services com PHP Web Services com PHP Exercício 1. Implementar e testar o exemplo Vinícius Costa de Souza - Julho de 2005 / 45
  • 46. Web Services com PHP Referê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.php Site oficial do PHP  http://www.w3.org/TR/soap/ SOAP  http://www.w3.org/TR/wsdl WSDL  http://www.w3.org/XML/ XML  http://www.uddi.org/ Vinícius Costa de Souza - Julho de 2005 / 46
  • 47. Web Services com PHP OBRIGADO! Vinícius Costa de Souza viniciuscs@unisinos.br www.inf.unsinos.br/~vinicius São Leopoldo, julho de 2005 Vinícius Costa de Souza - Julho de 2005 / 47