domingo, 16 de febrero de 2014

Web service SOAP con PHP

SOAP es un protocolo de intercambio de datos entre diferentes procesos basado en XML. Una definición bastante completa la podéis encontrar en wikipedia. Una vez dicho esto vamos a empezar a ver cómo creamos un web service básico en PHP y que use dicho protocolo.
Lo primero que necesitaremos será descargar NuSOAP a nuestro proyecto. Se trata de un pequeño toolkit que nos facilitará la vida con varias clases para trabajar con este protocolo en PHP. Una vez descargado y descomprimido dentro de una carpeta de nuestro proyecto, simplemente la deberemos incluir en el archivo PHP que va a funcionar de web service.
A continuación veremos un ejemplo básico. A nuestro fichero le llamaremos test.php y lo que hará será recibir dos números enteros, multiplicarlos y devolver el resultado.

require_once("nusoap.php"); 

$server = new soap_server();

$server->register('multiplicarNumeros'); 

function multiplicarNumeros($valor1, $valor2){ 
 $res = $valor1 * $valor2; 
 return $res; 
} 

$server->service($HTTP_RAW_POST_DATA);
A continuación nos hará falta un cliente del web service al que llamaremos cliente.php. Lo que haremos será en el constructor llamar a la url del servidor y mediante la función call() llamar al método que nos multiplicarla los números. Los parámetros de la función los pasaremos en forma de array.

require_once("nusoap.php"); 

$cliente = new nusoap_client("http://localhost/test.php");

$error = $cliente->getError(); 
if ($error){ 
 echo "Error: $error"; 
} 

$res = $cliente->call("multiplicarNumeros", array("valor1" => "10", "valor2" => "15")); 

$error = $cliente->getError(); 
if ($error){ 
 echo "Error: $error"; 
} else { 
 echo "Resultado: $res"; 
}
Hasta aquí tendríamos un cliente y servidor básico pero para que sea un web service más correcto nos haría falta definir el WSDL en la parte del servidor y así tener una definición de los métodos y parámetros que contiene. Para que NuSoap nos lo genere deberemos cambiar un poco la parte del servidor y nos quedaría de la siguiente forma.

require_once("nusoap.php"); 

$server = new soap_server(); 

// Configuramos el namespace y el WSDL 
$ns = "test"; 
$server->configureWSDL('test', $ns); 
$server->wsdl->schemaTargetNamespace = $ns; 

// Cambiamos la llamada para añadirle los parámetros de entrada y salida y el namespace 
$server->register('multiplicarNumeros', array('valor1' => 'xsd:integer', 'valor2' => 'xsd:integer'), array('return' => 'xsd:integer'), $ns); 

function multiplicarNumeros($valor1, $valor2){ 
 $res = $valor1 * $valor2; 
 return $res; 
} 

$server->service($HTTP_RAW_POST_DATA);
Ahora simplemente debes acceder a tu navegador y llamar a la URL http://localhost/test.php?wsdl y verás el WSDL que se ha generado.

1 comentario:

  1. Necesito un ejemplo de cración de web services con autenticación, usando el SoapHeader

    ResponderEliminar