lunes, 12 de septiembre de 2016

Crear un webservice básico con PHP y SOAP

14:19

SOAP es un protocolo de intercambio para servicios web basado en XML
¿cómo creamos un servicio web en PHP?
Para facilitarnos la vida empezaremos por descargar NuSOAP, un toolkit para el desarrollo de servicios web con SOAP en PHP, que nos proveerá de diversas clases para trabajar con este protocolo. Basta con descargarlo, descomprimirlo, meterlo dentro de nuestro proyecto y, cuando queramos usarlo, incluir nusoap.php como librería.
Ok, con NuSOAP instalado toca crear un servidor SOAP en nuestra aplicación. Para el ejemplo crearemos un servidor, lo llamaremos producto.php, que si recibe una petición donde se le pida una lista de libros devuelva tres títulos (es un ejemplo básico, piensa que en la realiadad podrías acceder a una base de datos y dar muchas más funcionalidades).
<?php
 require_once "nusoap.php";
  
        function getProd($categoria) {
     if ($categoria == "libros") {
         return join(",", array(
             "El señor de los anillos",
             "Los límites de la Fundación",
             "The Rails Way"));
     }
     else {
             return "No hay productos de esta categoria";
     }
 }
  
 $server = new soap_server();
 $server->register("getProd");
 $server->service($HTTP_RAW_POST_DATA);
?>
Ok, ahora necesitas un cliente, que llamaremos cliente.php. En el constructor, el cliente recibirá el url del servidor y para acceder al método que nos devuelve los libros recurriremos al método call(), al cual le pasaremos el nombre del método del servidor al que queremos acceder y los parámetros en forma de array. Además, también controlaremos que no haya errores en la comunicación.
<?php
 require_once "nusoap.php";
 $cliente = new nusoap_client("http://localhost/producto.php");
  
 $error = $cliente->getError();
 if ($error) {
     echo "<h2>Constructor error</h2><pre>" . $error . "</pre>";
 }
  
 $result = $cliente->call("getProd", array("categoria" => "libros"));
  
 if ($cliente->fault) {
     echo "<h2>Fault</h2><pre>";
     print_r($result);
     echo "</pre>";
 }
 else {
     $error = $cliente->getError();
     if ($error) {
         echo "<h2>Error</h2><pre>" . $error . "</pre>";
     }
     else {
         echo "<h2>Libros</h2><pre>";
         echo $result;
         echo "</pre>";
     }
 }
?>
Con esto ya tienes una idea múy básica del funcionamiento de un webservice SOAP construído con PHP. Pero claro, nos falta un archivo WSDL para tener un webservice decente. Aunque dicho archivo puede ser escrito a mano, NuSOAP puede generarlo por ti pasándole ciertos parámetros, por lo que lo ideal sería generarlo en el servidor. Así que modifica tu producto.php para que quede tal que así:
<?php
 require_once "nusoap.php";
  
 function getProd($categoria) {
     if ($categoria == "libros") {
         return join(",", array(
             "El señor de los anillos",
             "Los límites de la Fundación",
             "The Rails Way"));
     }
     else {
         return "No hay productos de esta categoria";
     }
 }
  
 $server = new soap_server();
 $server->configureWSDL("producto", "urn:producto");
  
 $server->register("getProd",
     array("categoria" => "xsd:string"),
     array("return" => "xsd:string"),
     "urn:producto",
     "urn:producto#getProd",
     "rpc",
     "encoded",
     "Nos da una lista de productos de cada categoría");
  
 $server->service($HTTP_RAW_POST_DATA);
?>
Como ves, el cambio en es cuando llamamos a register, ya que en vez de pasarle, como antes, el método en cuestión, le añadimos también varios argumentos para generar el WSDL:
  • El primer array nos permite definir el argumento de entrada y su tipo de datos
  • El segundo define la función de retorno y su tipo de datos
  • urn:producto es la definición del namespace
  • urn:producto#getProd es donde definimos la acción SOAP
  • Luego viene el tipo de llamada,que puede ser rpc, como en el ejemplo, o document
  • Tras esto definimos el valor del atribute use, que puede ser encoded o literal
  • Finalmente viene una descripción de qué hace el método al que llamamos
Ahora basta con que en el navegador accedas a producto.php?wsdl y verás el WSDL generado. Ya puedes copiarlo y añadirlo a tu directorio web (crea un archivo y llámalo, por ejemplo, libros.wsdl). Para que el cliente lo utilice debes modificar el código, y en el constructor, en vez del url le pasas el nombre del archivo, de forma que quede como en el ejemplo:
         $client = new nusoap_client("libros.wsdl", true);

Fuente

Written by

We are Creative Blogger Theme Wavers which provides user friendly, effective and easy to use themes. Each support has free and providing HD support screen casting.

0 comentarios:

Publicar un comentario

 

© 2013 Distribuidos. All rights resevered. Designed by Templateism

Back To Top