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" );
$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();
$ns = "test" ;
$server ->configureWSDL( 'test' , $ns );
$server ->wsdl->schemaTargetNamespace = $ns ;
$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.