Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SOAP es un protocolo de intercambio para servicios web basado en XML Para facilitarnos la vida empezaremos por
descargar NuSOAP, que nos proveerá de diversas clases para trabajar con este protocolo.
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 realiad 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";
}
}
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->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