WebServices con Nusoap y CakePHP 1.2
WebServices sin re-inventar la rueda
Me dispuse a crear un artículo sobre este tema, dado que me ha sido bastante complicado encontrar información al respecto y en general se proponian soluciones muy complejas que muchas veces no vienen al caso, uno busca una forma simple de hacer algo sin re inventar la rueda … asi que luego de buscar y buscar por varias horas me encontre con información interesante, pero que tenia links a archivos rotos y que tuve que indagar la web hasta dar con estos archivos y ademas estaba escrito para CakePHP 1.1 con lo cual tuve que realizar una serie de correcciones a estos archivos, nada complicado … en general cambiar la llamada a “Vendor()” por “App::import()” y ese tipo de cosas, tambien tuve que quitar un componente llamado “cacheObject” que aparentemente ya no existe en CakePHP 1.2 …
Lo cierto es que con algun esfuerzo logre hacer funcionar nusoap desde CakePHP con las venajas que esto representa y levantar un servicio web sin demaciadas complicaciones y muy compresible!
Comencemos
OK, manos a la obra, primeramente deberas de descargar los siguientes archivos:
1) soap.php.zip , este archivo debes descomprimirlo y colocarlo en “app/controllers/components”
2) nusoap.zip, esta es la librería nusoap con algunos “retoques” para que funcione con Cake, descomprime y coloca la carpeta en “app/vendors”
Ok, ya tenemos las herramientas necesarias para construir nuestro WebService asi que continuemos …. vamos a suponer que tenemos una tabla creada que se llama “users” que posee una lista de usuarios registrados, nuestra tabla users tiene dos campos, Id y Nombre, nuestro WebService será capaz de dado un Id retornarle al cliente su nombre, si ya se que no es gran cosa! pero lo importante es que podamos tener funcionando un WebService, hacer mas que esto será muy facil por que entenderemos perfectamente como funciona.
Nuestro siguiente paso es crear un “controller” que nos sirva de URL para nuestro WebService y tendrá el siguiente aspecto:
Archivo: userservices_controller.php
<?php
Configure::write(’debug’,0);
App::import(’Vendor’,'nusoap/web_services_controller’);
class UserServicesController extends WebServicesController
{
var $name=’UserServices’;
var $uses=array(’User’);
var $api=array(
’name’=>array(’doc’=>’Obtiene el Nombre de un Usuario’,
‘input’=>array(’user_id’=>’xsd:integer’),
‘output’=>array(’return’=>’xsd:string’)),
);
function name($user_id)
{
$data=$this->User->findById($user_id);
return $data['User']['Nombre'];
}
}
?>
Bien, eso es todo ! ya tenemos nuestro primer servicio web funcionando ! a no me crees? me parece lógico yo tampoco podía creerlo, pero para que me creas vamos a probar al pequeño, lo que primero deberías poder ver es la publicación del servicio, esto puedes hacerlo navegando la URL: http://localhost/tusitio/userservices, si aqui puedes ver la definición del servicio quiere decir que vamos bien ! si no es así entonces revisa los pasos anteriores.
Para aclarar mejor las cosas vamos a crear un pequeño soap cliente, para comprobar por nosotros mismos que ya esta funcional el servicio web.
Crearemos un “Controller” donde tendrémos un cliente “soap” el cual realizará consultas al servicio web que hemos creado es decir “consumira” este servicio web.
Archivo: wstest_controller.php
<?
class WstestController extends AppController{
var $name = ‘Wstest’;
var $uses = null;
var $components = array(’soap’);
function nombre($user_id){
$url=”http://localhost/tusitio/userservices/“;
$func=’name’;
$param=array(’user_id’=>$user_id);
$name=$this->soap->client($url,$func,$param);
print “Resultado: “.$name;
exit;
$this->set(’name’,$name); // haríamos esto si quisieramos mostrar los datos en una vista, pero para el caso con el ”print” anterior nos alcanza
}
}
?>
Ok, para probar esto, ya deberíamos tener nuestra tabla users (id,Nombre) con algunos datos cargados. Solo nos queda llamar a la URL de nuestro controller “cliente” de la siguiente manera: http://localhost/tusitio/wstest/nombre/43
Esto debería mostrarnos en pantalla el nombre de nuestro usuario con Id 43, ya eres un desarrollador capaz de utilizar SOAP
Saludos a la comunidad y si encuentran algun error en esto, por favor no dejen de avisarme así lo correjimos!