Professional Documents
Culture Documents
Contenido
NuSOAP en CodeIgniter ...................................................................................................................... 3 1. Qu es NuSOAP? ....................................................................................................................... 3 2. Integrando NuSOAP en CodeIgniter ............................................................................................ 3 3.Creando un servidor NuSOAP en CodeIgniter.............................................................................. 5 Creacin Servicio Web con Php utilizando JSON ................................................................................ 8 Trabajos citados ................................................................................................................................ 12
NuSOAP en CodeIgniter
1. Qu es NuSOAP?
Pero antes echemos un vistazo a ojo de pjaro qu es y para qu sirve la librera NuSOAP. Esta utilsima librera con uso muy extendido en el desarrollo web es un kit de herramientas (ToolKit) para desarrollar Web Services bajo el lenguaje PHP. Est compuesto por una serie de clases que nos harn mucho ms fcil el desarrollo de Web Services. Provee soporte para el desarrollo de clientes (aquellos que consumen los Web Services) y de servidores (aquellos que los proveen). NuSOAP est basado en SOAP 1.1, WSDL 1.1 y HTTP 1.0/1.1. Aunque no es el nico, dado que existen ms herramientas de este tipo, podra decirse que esta es de las mejores y por tanto, de las ms utilizadas en el desarrollo web.
La forma ms cmoda de integrar esta librera en CodeIgniter es creando nuestra propia pseudo librera de CodeIgniter la cual a su vez llama y permite el uso de la verdadera librera NuSOAP que nos hemos bajado previamente. Digo pseudo porque realmente lo nico que haremos ser una interfaz de comunicacin entre los controladores de nuestra aplicacin y la librera NuSOAP en s misma. Pasamos a desarrollar nuestra propia librera CodeIgniter, para ello creamos un nuevo archivo llamado nuSoap_lib.php (o como ustedes quieran llamarlo, el nombre slo depende de su imaginacin) dentro del directorio /system/application/libraries, al mismo nivel que el directorio que contiene a la librera NuSOAP. Dentro de nuSoap_lib.php introducimos el siguiente cdigo:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class nuSoap_lib{ function Nusoap_lib(){ require_once(str_replace("\\","/",APPPATH).'libraries/NuSOAP/lib/nusoap'.EXT); //Por si estamos ejecutando este script en un servidor Windows }
} ?>
Con esto ya tenemos creada nuestra pseudo librera de NuSOAP, a partir de ahora ya podemos utilizarla desde nuestros controladores. Para ello hemos de introducir el siguiente cdigo en nuestro controlador para llamar a la librera nuSoap:
class Client extends Controller { function __construct() { parent::Controller(); $this->load->library("nuSoap_lib"); }
if($this->nusoap_client->fault) { $text = 'Error: '.$this->nusoap_client->fault; } else { if ($this->nusoap_client->getError()) { $text = 'Error: '.$this->nusoap_client->getError(); } else { $row = $this->nusoap_client->call( 'funcionEnElServidor', array(parametros) ); ... } } }
De esta forma, podremos consumir servicios SOAP desde nuestra aplicacin implementada con CodeIgniter. Como ven, es bastante sencillo y muy cmodo. Una razn ms para seguir utilizando este sencillo y potentsimo framework que es CodeIgniter.
$this->load->library("nuSoap_lib"); $this->nusoap_server = new soap_server(); $this->nusoap_server->configureWSDL("MiembroWSDL", "urn:MiembroWSDL"); $this->nusoap_server->wsdl->addComplexType( "Miembro", "complexType", "array", "", "SOAP-ENC:Array", array( "id"=>array("name"=>"id", "type"=>"xsd:int"), "nombre"=>array("name"=>"nombre", "type"=>"xsd:string"), "apellido"=>array("name"=>"apellido", "type"=>"xsd:string") ) ); $this->nusoap_server->register( "obtenerMiembro", array( "id" => "xsd:int", ), array("return"=>"tns:Miembro"), "urn:MiembroWSDL", "urn:MiembroWSDL#obtenerMiembro",
Todo esto est muy bien, pero qu significa todo esto? Bueno, paso a explicar paso a paso qu es y para qu sirve cada cosa. En la funcion $this->nusoap_server->wsdl->addComplexType tenemos varios campos: Nombre. Este ser en nombre que le daremos al tipo. typeClass. Es el tipo propio NuSOAP que compondr nuestro tipo (los ms habituales son complexType o simpleType) phpType. Es el tipo propio de PHP al cual pertenecer la estructura que devolver nuestro servicio (actualmente los soportados son array y struct)
compositor. Este campo indica cmo los subelementos de nuestra estructura funcionan, es decir, son todos elementos opcionales siendo incluidos en cualquier orden (valor all), o son opcionales pero en el orden establecido (valor sequence) o bien, slo uno de ellos est permitido cada vez (valor choice). restrictionBase. Esto le indica al sistema que nuestro tipo complejo se basa en el tipo Array definido en soap-encoding namespace.
Por ltimo, definimos los campos que tendr nuestro campo complejo y de qu tipos sern esos campos. Una vez hemos definido el tipo que vamos a utilizar, en la funcin $this->nusoap_server>register creamos el mtodo que podr ser llamado desde cualquier cliente externo. En l establecemos:
1. 2. 3. 4. 5. 6. 7. 8.
El nombre del mtodo Los parmetros de entrada que necesita nuestro mtodo El tipo de los parmetros de salida que devolver nuestro mtodo Espacios de nombres del mtodo Accin a realizar dentro del espacio de nombre (el mismo nombre del mtodo) Estilo Uso Informacin sobre el mtodo
Con esto ya tenemos casi listo nuestro servidor de servicios web NuSOAP. Slo nos falta un detalle de configuracin. En el archivo system/application/config/routes.php hemos de aadir la siguiente ruta:
$route['ServidorNuSoap/obtieneMiembro/wsdl'] = 'ServidorNuSoap/index/wsdl';
Dado que es imprescindible establecer la ruta correcta a nuestro servicio NuSOAP. Con esto ya tenemos creado y listo para empezar a ofrecer servicios a nuestro flamante servidor NuSOAP integrado en nuestro framework de desarrollo CodeIgniter. (Cass)
<?php class config{ public static function getBBDDServer() { return 'localhost'; } public static function getBBDDName(){ return 'android'; } public static function getBBDDUser(){ return 'root'; } public static function getBBDDPwd(){ return 'xxxxxx'; } } ?>
El siguiente archivo ser dbmanager.php, este archivo nos ayudar a gestionar la base de datos y las consultas que hagamos a ella. Lo voy a hacer lo ms bsico posible para no complicar mucho el ejemplo. Vuelvo a crear una clase dbmanager con el mtodo executeQuery, al que le pasamos una consulta, esta se ejecuta y nos devuelve el resultado.
<?php include_once('globals.php'); class dbmanager{ public function executeQuery($sql){ $con = mysql_connect(config::getBBDDServer(), config::getBBDDUser(), config::getBBDDPwd()); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db(config::getBBDDName(), $con); $result = mysql_query($sql); mysql_close($con);
<?php include_once('globals.php'); include_once('dbmanager.php'); class libros{ private function getLibros(){ $sql = "SELECT l.* "; $sql .= " FROM libros AS l "; $db = new dbmanager(); return $db->executeQuery($sql); } public function getJSONLibros(){ $json = ""; $i = 0; $result = $this->getLibros(); $json .= " { \"libros\" : [ "; while($row = mysql_fetch_array($result)){ if($i > 0) $json .= ","; $json .= " { \"id\" : ".$row['id_libro'].", \"libro\": \"".$row['libro']."\", \"isbn\": \"".$row['isbn']."\" "; $json .= "} "; $i++; } $json .= " ] "; $json .= " } "; return $json; } }
El ltimo archivo es al que llamaremos para obtener el resultado de nuestro servicio, lo llamaremos service.libros.php. Este archivo es muy simple, nicamente se hace el include necesario, instancia la clase libros e imprimimos el resultado del mtodo getJSONLibros.
Por ltimo probamos en el navegador este servicio con la url http://localhost/android/service.libros.php. Debera aparecer el JSON correspondiente, si queris comprobar que est todo correcto podis hacerlo en alguna de las webs que lo hacen online, http://jsonlint.com/ por ejemplo. Ahora ya tenemos listo nuestro servicio listo para poder leerlo con cualquier cliente, en nuestro caso haremos un cliente en Android la semana que viene que lea este JSON y nos lo muestre. (www.nosinmiubuntu.com)
Trabajos citados
Cass, A. V. (s.f.). PHP'S Blog. Obtenido de http://phpsblog.wordpress.com/2009/12/04/creandoun-servidor-nusoap-en-codeigniter/ www.nosinmiubuntu.com. (s.f.). No sin mi Ubuntu. Obtenido de http://www.nosinmiubuntu.com/2012/01/como-crear-servicios-web-php.html