/ desarrollo

Servicios Web – Retornar un XML con NuSOAP

Aquí estoy nuevamente con un artículo de web services / servicios web, en esta oportunidad, voy a incluir un ejemplo en el cual ser servidor retorna un XML al cliente, y este lo muestra por pantalla. Este ejemplo surgió a petición de un visitante a mi blog. Espero que les sea de utilidad.

Servidor

El servidor es muy similar a todos los servidores de los ejemplos anteriores, simplemente que retorna un XML. Dado que el servidor retorna un XML, debemos convertirlo antes de poder retornarlo, para que no genere conflictos con el código del “envoltorio” (SOAP) que transportará el XML. La forma más rápida es utilizar el método base64_encode que ya trae incorporado PHP. Es decir, codificamos el XML con base64, de esta forma nos aseguramos que no aparecerán caracteres extraños, y luego retornamos ese XML modificado.

<?php 
require_once('nusoap/lib/nusoap.php'); 
$miURL = 'http://pruebas.orlandobrea.com.ar/nusoap_ejXML'; 
$server = new soap_server(); 
$server->configureWSDL('ws_orlando', $miURL); 
$server->wsdl->schemaTargetNamespace=$miURL;

$server->register('getXML', // Nombre de la funcion 
                   array(), // Parametros de entrada 
                   array('return' => 'xsd:string'), // Parametros de salida 
                   $miURL); 
function getXML(){ 
    return new soapval('return', 'xsd:string', base64_encode('<?xml version="1.0" encoding="UTF-8"?> 
<vehiculos> 
  <coche> 
      <marca>Toyota</marca> 
      <modelo>Corolla</modelo> 
      <fechaCompra>2002</fechaCompra> 
  </coche> 
  <coche> 
      <marca>Honda</marca> 
      <modelo>Civic</modelo> 
      <fechaCompra>2003</fechaCompra> 
  </coche')); 
}

$server->service($HTTP_RAW_POST_DATA); 
?>

En el ejemplo, solo muestro la respuesta que me ofreció el servidor del servicio web, cuando estemos ante una implementación real, seguramente deberemos procesar esta información para ofrecer, por ejemplo, una respuesta a un usuario.

Conclusión

Como hemos podido ver, la implementación de este tipo de alternativas, es muy sencilla, solo debemos tener especial cuidado en la codificación de la respuesta que utilizamos en NuSOAP. A modo de “regla” podría decir que todo aquello que sabemos que utilizará caracteres extraños, podemos codificarlo en base 64 en el servidor, y luego decodificarlo en el cliente (de esta forma nos aseguramos que la información ha viajado correctamente).

Debo reconocer que hace tiempo que no indago el código de NuSOAP, por lo tanto no recuerdo si codifica de alguna forma las respuestas automáticamente (que yo recuerde, no lo hace).

Espero que haya sido de utilidad, y que sirva para que sigan explorando con los Web Services.