<pedrocorreia.net ⁄>
corner
<mySearch ⁄> <mySearch ⁄>

corner
 
corner
<mySnippets order="rand" ⁄> <mySnippets order="rand" ⁄>

corner
 
corner
<myContacts ⁄> <myContacts ⁄>

<email ⁄>


pc@pedrocorreia.net

<windows live messenger ⁄>


pedrojacorreia@hotmail.com

<myCurriculum type="pdf" ⁄>


Download
corner
 
corner
<myBlog show="last" ⁄> <myBlog show="last" ⁄>

corner
 
corner
<myNews show="rand" ⁄> <myNews show="rand" ⁄>

corner
 
corner
<myNews type="cat" ⁄> <myNews type="cat" ⁄>

corner
 
corner
<myQuote order="random" ⁄> <myQuote order="random" ⁄>

corner
 
corner
<myPhoto order="random" ⁄> <myPhoto order="random" ⁄>

<pedrocorreia.net ⁄>
corner
 
corner
<myAdSense ⁄> <myAdSense ⁄>

corner
 
corner
<myVisitorsMap ⁄> <myVisitorsMap ⁄>

corner
 
 

<Implementar e consumir um WebService ⁄ >




clicks: 22654 22654 2007-08-17 2007-08-17 goto mySnippets mySnippets php  Download  Bookmark This Bookmark This



Hoje em dia um dos recursos na web que está mto em voga são os chamados Webservices. Permitem-nos por ex. aceder a recursos disponibilidizados por outras entidades (ou nós próprios permitirmos que outras entidades possam aceder a serviços que nós prestamos), não vou explicar em detalhe o que é um webservice, podem consultar este link em que tem informação muito mais detalhada e com maior precisão, como tal recomendo, vivamente, a sua leitura.

nota: este snippet só funciona correctamente em PHP4

O objectivo deste snippet é demonstrar como fazer um Webservice, para tal vamos recorrer uma ferramenta que já faz praticamente tudo por nós, nuSOAP, poderão/ deverão consultar a informação disponivel no site. Muito basicamente o que este serviço nos faz é gerar todo o código necessário, WSDL, uma interface para podermos consultar a documentação, etc, evitando assim termos de codificar tudo isto, só teremos de nos focar na implementação do nosso webservice e quais os serviços que iremos fornecer aos nossos clientes.

O titulo do snippet foca 2 aspectos: a implementação do nosso webservice, na qual vamos criar os objectos/ funções necessárias para o correcto funcionamento da nossa aplicação webservice (recorrendo como digo anteriormente ao nuSOAP; e consumir o webservice, não é mais do que aceder ao webservice e usar os serviços por ele prestado.



Começando pela parte de implementação do webservice, vamos chamar ao ficheiro WebService.php:


  1. <?php
  2. include_once ("nusoap.php");
  3. $namespace = "http://localhost/webservice/";
  4.  
  5. $webservice = new soap_server();
  6. $webservice->configureWSDL('MyWebService',$namespace); //configurar o objecto WSDL
  7. $webservice->wsdl->schemaTargetNamespace = $namespace;
  8.  
  9. //registar um método
  10. $webservice->register(
  11. 'ws_StringReverse', //nome da função
  12. array('str'=>'xsd:string'), //o que recebe
  13. array('str_reversed'=>'xsd:string'), //o que devolve
  14. $namespace,
  15. "$namespace#ws_StringReverse",
  16. 'rpc',
  17. 'encoded',
  18. 'Reverte uma string'//descrição
  19. );
  20.  
  21. //registar outro método
  22. $webservice->register(
  23. 'ws_StringLength', //nome da função
  24. array('str' => 'xsd:string'), //o que recebe
  25. array('str_length' => 'xsd:int'), //o que devolve
  26. $namespace,
  27. "$namespace#ws_StringLength",
  28. 'rpc',
  29. 'encoded',
  30. 'Obter o tamanho de uma string'//descrição
  31. );
  32.  
  33.  
  34.  
  35. /**
  36. * Webservice que reverte uma string
  37. *
  38. * nota: sim é básico e pointless, mas o objectivo era mesmo
  39. * mostrar um exemplo do webservice :)
  40. *
  41. * @param String $str
  42. * @return String
  43. */
  44. function ws_StringReverse($str){
  45. $str_reversed=strrev($str);
  46. return new soapval('return','xsd:string',$str_reversed);
  47. }
  48.  
  49. /**
  50. * Webservice que reverte uma string
  51. *
  52. * nota: sim é outra função básica e pointless, mas o objectivo era mesmo
  53. * mostrar um exemplo do webservice :)
  54. *
  55. * @param String $str
  56. * @return String
  57. */
  58. function ws_StringLength($str){
  59. $str_length=strlen($str);
  60. return new soapval('return','xsd:string',$str_length);
  61. }
  62.  
  63. //processa o pedido e devolve a resposta
  64. $webservice->service($HTTP_RAW_POST_DATA);
  65. ?>




Se acedermos directamente ao url http:⁄⁄servidor.com⁄webservice⁄WebService.php vamos ter acesso à tal interface em que poderemos ver os serviços disponiveis bem como a sua descrição e atributos. Para visualizar o WSDL (WebService Description Language) http:⁄⁄servidor.com⁄webservice⁄WebService.php?wsdl, no nosso caso este será o xml gerado:

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  4. xmlns:tns="http://localhost/webservice/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  5. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/"
  6. targetNamespace="http://localhost/webservice/">
  7.  
  8. <types>
  9. <xsd:schema targetNamespace="http://localhost/webservice/">
  10. <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
  11. <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/>
  12. </xsd:schema>
  13. </types>
  14.  
  15. <message name="ws_StringReverseRequest"><part name="str" type="xsd:string"/></message>
  16. <message name="ws_StringReverseResponse"><part name="str_reversed" type="xsd:string"/></message>
  17. <message name="ws_StringLengthRequest"><part name="str" type="xsd:string"/></message>
  18. <message name="ws_StringLengthResponse"><part name="str_length" type="xsd:int"/></message>
  19.  
  20. <portType name="MyWebServicePortType">
  21. <operation name="ws_StringReverse">
  22. <documentation>Reverte uma string</documentation>
  23. <input message="tns:ws_StringReverseRequest"/>
  24. <output message="tns:ws_StringReverseResponse"/>
  25.  
  26. </operation><operation name="ws_StringLength">
  27. <documentation>Obter o tamanho de uma string</documentation>
  28. <input message="tns:ws_StringLengthRequest"/>
  29. <output message="tns:ws_StringLengthResponse"/>
  30. </operation>
  31. </portType>
  32.  
  33. <binding name="MyWebServiceBinding" type="tns:MyWebServicePortType">
  34. <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  35. <operation name="ws_StringReverse">
  36. <soap:operation soapAction="http://localhost/webservice/#ws_StringReverse" style="rpc"/>
  37. <input>
  38. <soap:body use="encoded" namespace="http://localhost/webservice/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  39. </input>
  40.  
  41. <output>
  42. <soap:body use="encoded" namespace="http://localhost/webservice/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  43. </output>
  44. </operation>
  45.  
  46. <operation name="ws_StringLength">
  47. <soap:operation soapAction="http://localhost/webservice/#ws_StringLength" style="rpc"/>
  48. <input>
  49. <soap:body use="encoded" namespace="http://localhost/webservice/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  50. </input>
  51. <output>
  52. <soap:body use="encoded" namespace="http://localhost/webservice/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  53. </output>
  54. </operation>
  55. </binding>
  56.  
  57. <service name="MyWebService">
  58. <port name="MyWebServicePort" binding="tns:MyWebServiceBinding">
  59. <soap:address location="http://localhost/webservice/WebService.php"/>
  60. </port>
  61. </service>
  62. </definitions>





De seguida ficará um simples exemplo de como poderemos aceder ao nosso webservice e usá-lo:

  1. <?php
  2. include_once ('nusoap.php');
  3. $wsdl = "http://localhost/webservice/WebService.php?wsdl";
  4. $str="Este é o meu WebService!";
  5.  
  6. //testar ws_StringReverse
  7. $clientStringReverse = new soapclient($wsdl,'wsdl');
  8. $param = array('str'=>$str);
  9. echo "ws_ReverseString: $str <=> ".$clientStringReverse->call('ws_StringReverse',$param);
  10. #vai imprimir: ws_ReverseString: Este é o meu WebService! <=> !ecivreSbeW uem o é etsE
  11.  
  12. echo "<hr>";
  13.  
  14. //testar ws_StringLength
  15. $clientStringLength = new soapclient($wsdl,'wsdl');
  16. $param = array('str'=>$str);
  17. echo "ws_StringLength: $str <=> ".$clientStringLength->call('ws_StringLength',$param);
  18. #vai imprimir: ws_StringLength: Este é o meu WebService! <=> 24
  19. ?>










clicks: 22654 22654 2007-08-17 2007-08-17 goto mySnippets mySnippets php  Download  Bookmark This Bookmark This