Muchas organizaciones han adoptado Apache y PHP como entorno de aplicaciones web. Adoptar PHP en modo de servicios web puede parecer difícil. Pero, de hecho, con NuSoap, puedes usar PHP fácilmente para crear un cliente y servidor SOAP.
Para ilustrar cómo utilizar NuSoap y PHP para crear servicios web, daremos un ejemplo sencillo. Esta aplicación de ejemplo consta de un servidor y un cliente de servicios web PHP. Implementará dos funciones: invertir el orden de los caracteres en una cadena y encontrar la suma de dos números.
Servidor SOAP PHP Configurar un servidor SOAP es muy fácil con PHP y NuSoap. Básicamente, simplemente escribe las funciones que desea exponer a sus servicios web y las registra con NuSoap.
Bien, se requieren dos pasos más para completar el establecimiento del servidor PHP SOAP. Primero debe crear una instancia del objeto NuSoap en su código PHP y luego usar el método HTTP POST para pasar los datos sin procesar a NuSoap para su procesamiento. ¿Suena simple? Primero echemos un vistazo al Listado 1.
Listado 1: Soapfunc.php
<?
require_once('nusoap.php');
función inversa($cadena){
$retval = "";
si(strlen($str) < 1) {
return new Soap_fault('Cliente','','Cadena no válida');
}
para ($i = 1; $i <= strlen($cadena); $i++) {
$retval .= $cadena[(strlen($cadena) - $i)];
}
devolver $retval;
}
función agregar2números($num1, $num2) {
if (recortar($num1) != intval($num1)) {
return new Soap_fault('Cliente', '', 'El primer número no es válido');
}
if (recortar($num2) != intval($num2)) {
return new Soap_fault('Cliente', '', 'El segundo número no es válido');
}
retorno ($núm1 + $núm2);
}
?>
El Listado 1 proporciona el archivo fuente de Soapfunc.php. Este archivo contiene dos funciones que queremos exponer a los servicios web a través del protocolo SOAP: inversa y add2numbers, que son el núcleo de nuestra aplicación de servicios web. La función inversa toma un argumento, invierte el orden de los caracteres en la cadena y lo devuelve.
Listado 2: Soapserver.php
<?
require_once('nusoap.php');
incluir('soapfunc.php');
$jabón = nuevo servidor_jabón;
$jabon->register('reverse');
$jabón->register('add2numbers');
$jabón->servicio($HTTP_RAW_POST_DATA);
?>
El Listado 2 ilustra el uso de las funciones de registro de NuSoap y la llamada a los controladores SOAP. Como puede ver, registrar sus dos funciones (en Soapfunc.php) y pasar los datos POST al objeto Soap_Server es tan fácil como crear una nueva instancia del objeto Soap_Server. El objeto SOAP_server examinará los datos POST y determinará qué función llamar, luego pasará los parámetros a esta función PHP. Los datos devueltos por la función PHP se vuelven a empaquetar en una respuesta SOAP y se entregan al cliente SOAP que solicita el servicio.
Cliente PHP SOAP Ahora que hemos creado un servidor SOAP usando NuSoap y PHP, necesitamos probarlo. Así como establecimos un programa de servidor SOAP, podemos usar NuSoap para crear un programa cliente SOAP en PHP. El Listado 3 proporciona el programa fuente del programa cliente PHP SOAP.
Ahora que hemos creado un servidor SOAP usando NuSoap y PHP, necesitamos probarlo. Así como establecimos un programa de servidor SOAP, podemos usar NuSoap para crear un programa cliente SOAP en PHP. El Listado 3 proporciona el programa fuente del programa cliente PHP SOAP.
Listado 3: Soapclient.php
<?
incluir('nusoap.php');
$cliente = new Soapclient('http://localhost/soapserver.php');
$str = "Esta cadena se invertirá";
$params1 = array('str'=>$str);
$revertido = $cliente->call('reverse',$params1);
echo "Si inviertes '$str', obtienes '$reversed'<br>n"
;
$n2 = 14;
$params2 = array('num1'=>$n1, 'num2'=>$n2);
$agregado = $cliente->call('add2numbers', $params2);
echo "Si agregas $n1 y $n2 obtienes $added<br>n";
?>
Para utilizar un programa cliente PHP en un servidor SOAP, debe hacer tres cosas. Primero, necesitas crear un objeto cliente de jabón. El objeto SOAPclient es responsable de manejar la clasificación de parámetros y el protocolo SOAP. Soapclient requiere un parámetro que debe ser una URL. Esta URL puede apuntar a un punto final HTTP o una descripción WSDL del servidor SOAP real. En nuestro caso, es una URL que apunta a nuestro servidor PHP SOAP.
Al llamar a una función que requiere parámetros, primero debe crear una matriz de parámetros, que contiene un conjunto de pares clave-valor. La clave es el nombre del parámetro y el valor es el valor del parámetro.
Cuando necesita llamar a una función, utiliza el objeto SOAPCLENT para llamarla y pasar dos parámetros. El primer parámetro es el nombre de la función que desea llamar y el segundo parámetro es una matriz que contiene los parámetros de la función SOAP. La función que llama devolverá el valor de la función SOAP que llamó.
Para ejecutar este ejemplo, simplemente ingrese la URL de Soapclient.php en su navegador web. Obtendrá un resultado similar a:
Si invierte 'Esta cadena se invertirá', obtendrá 'desrever eb lliw gnirts sihT' Si suma 5 y 14, obtendrá 19