nu soap
TRANSCRIPT
Crear un servicio web SOAP en PHP usando la libreria NuSOAP
En este ejemplo utilizaremos NuSOAP:
NuSOAP es una librería para desarrollar Web Services bajo el lenguaje PHP. NuSOAP no es el único soporte
(hay muchas mas librerías) pero siempre me ha dado buenos resultados y existe desde hace mucho tiempo, por lo cual está bastante avanzada. Podemos descargarla desde este enlace.
Configuración
Bastará con descomprimirla en nuestro directorio web e incluirla e nuestro archivo PHP:
Código:
?
require_once('./lib/nusoap.php');
Una vez incluida la librería, podemos inicializar/configurar el servicio.
Código:
?
$server = new soap_server(); $server->configureWSDL("HolaMundo", "urn:holamundowsdl"); $server->wsdl->schemaTargetNamespace = "urn:holamundowsdl";
Seguido de este código podemos definir las funciones y los tipos de datos que consumirá nuestro servicio (lo veremos después).
Para finalizar, añadiremos el código para invocar el servicio.
Código:
?
$HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
$server->service($HTTP_RAW_POST_DATA);
Definición de funciones
En este ejemplo vamos a crear 3 funciones.
Código:
?
function hola($nombre) { return 'Hola, ' . trim( $nombre ); }
function IniciarSorteo($persona) { $Saludo = 'Hola, ' . trim( $persona['Nombre'] ) . '. '; $Saludo .= 'Usted tiene ' . $persona['Edad'] . ' '; $Saludo .= 'años y es ' . trim( $persona['Sexo'] ) . '. ';
return array( 'saludo' => $Saludo, 'ganador' => (bool) rand(0, 1)
); }
function GetPersonas() { $List = array();
$Sexo = array( 0 => "Hombre", 1 => "Mujer" );
for ( $i=1; $i<11; $i++ ) { $List[$i]['Nombre'] = "Persona " . $i; $List[$i]['Edad'] = rand(1, 100); $List[$i]['Sexo'] = $Sexo[rand(0, 1)]; }
return $List; }
1. La función "hola", tiene un parámetro de tipo "string" que será para pasarle un nombre y devuelve un
"saludo" que será de tipo "string". 2. La función "IniciarSorteo", tiene un parámetro de entrada de un tipo definido: "persona".
Este tipo tendrá los siguientes campos: 1. "Nombre" de tipo "string". 2. "Edad" de tipo "integer". 3. "Sexo" de tipo "string". La función devuelve también un dato de tipo definido: "ResultadoSorteo". Este tipo tendrá los siguientes campos: 4. "saludo" de tipo "string". 5. "ganador" de tipo "boolean".
3. La función "GetPersonas", no tiene parámetros de entrada y devuelve un array de tipo "Persona".
Definición de tipos en nuestro servicio web
Código:
?
$server->wsdl->addComplexType( 'TWsPersona', 'complexType', 'struct', 'all', '', array( 'Nombre' => array('name' => 'Nombre', 'type' => 'xsd:string'), 'Edad' => array('name' => 'Edad', 'type' => 'xsd:int'), 'Sexo' => array('name' => 'Sexo', 'type' => 'xsd:string') ) );
$server->wsdl->addComplexType( 'TWsArrayOfPersona', 'complexType', 'array', '',
'SOAP-ENC:Array', array(), array( array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:TWsPersona[]') ), 'tns:TWsPersona' );
$server->wsdl->addComplexType( 'TWsResultadoSorteo', 'complexType', 'struct', 'all', '', array( 'saludo' => array('name' => 'saludo', 'type' => 'xsd:string'), 'ganador' => array('name' => 'ganador', 'type' => 'xsd:boolean') ) );
Definición de métodos en nuestro servicio web
Código:
?
$server->register( 'hola', // Nombre del método array('nombre' => 'xsd:string'), // Parámetros de entrada array('return' => 'xsd:string'), // Parámetros de salida 'urn:holamundowsdl', // Nombre del workspace 'urn:holamundowsdl#hola', // Acción soap 'rpc', // Estilo 'encoded', // Uso
'Saluda a la persona' // Documentación );
$server->register( 'IniciarSorteo', // Nombre del método array('Persona' => 'tns:TWsPersona'), // Parámetros de entrada array('return' => 'tns:TWsResultadoSorteo'), // Parámetros de salida 'urn:holamundowsdl', // Nombre del workspace 'urn:holamundowsdl#IniciarSorteo', // Acción soap 'rpc', // style 'encoded', // Uso
'Saludar y devuelve el resultado del sorteo' // Documentación );
$server->register( 'GetPersonas', // Nombre del método array(), // Parámetros de entrada array('return' => 'tns:TWsArrayOfPersona'), // Parámetros de salida 'urn:holamundowsdl', // Nombre del workspace 'urn:holamundowsdl#GetPersonas', // Acción soap 'rpc', // style 'encoded', // Uso
'Devuelve un array de personas' // Documentación );