Web Services con Zend Framework



Hosting barato
VN:F [1.9.20_1166]
Rating: 8.9/10 (9 votes cast)

A la hora de desarrollar web services, tenemos que tener en cuenta que habrá una parte de código de servidor y otra parte de código de cliente, aunque si somos la parte que define el web service no nos deberemos preocupar en la definición del código que se debe ejecutar en el cliente.

Antes de nada, deberemos habilitar en nuestro php.ini la extensión "php_soap" y reiniciar el servidor.

Una vez habilitada la extensión, para poder ofrecer nuestro servicio, deberemos crear un controlador al que podamos llamar para obtene el archivo WSDL. Además, aprovecharemos dicho controlador, para usarlo también como cliente a través de su método “clientAction”, teniendo en cuenta que este método estará integrado en cualquier desarrollo externo a nuestra aplicación, ya que a través de el, interrogarán a nuestra aplicación.

<?php

require_once 'Zend/Controller/Action.php';

class SoapController extends Zend_Controller_Action
{

	private $_WSDL_URI = 'http://localhost:8080/soap?wsdl';

    public function indexAction(){
    	$this->_helper->viewRenderer->setNoRender();

    	if(isset($_GET['wsdl'])) {
    		//Devuelve el XML con el WSDL
    		$this->hadleWSDL();
		} else {
			//Gestiona las peticiones a través de SOAP
    		$this->handleSOAP();
		}
    }

	private function hadleWSDL() {
		$autodiscover = new Zend_Soap_AutoDiscover();
    	$autodiscover->setClass('ZendExt_Application_Resource_Soaptest');
    	$autodiscover->handle();
    	exit;
	}

	private function handleSOAP() {
		$soap = new Zend_Soap_Server($this->_WSDL_URI);
    	$soap->setClass('ZendExt_Application_Resource_Soaptest');
    	$soap->handle();
    	exit;
	}

    public function clientAction() {
    	try{
	    	$client = new Zend_Soap_Client($this->_WSDL_URI);

	    	$this->view->add_result = $client->math_add(11, 55);
	    	$this->view->logical_not_result = $client->logical_not(true);
	    	$this->view->sort_result = $client->simple_sort( array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"));
    	}catch(Exception $e){
			echo "error:" . $e->getMessage();
    	}
    }
}
?>

El código que nos implementará la lógica de negocio asociada a los métodos definidos para nuestro web service la podemos tener definida en nuestra librería externa "/library/ZendExt/Application/Resource/WSTest.php"

<?php

class ZendExt_Application_Resource_WSTest {
	/**
	 * Metodo que realiza la suma de dos cifras enteras
	 *
	 * @param Int $param1
	 * @param Int $param2
	 * @return Int
	 */
	public function suma($param1, $param2) {
		return $param1+$param2;
	}

	/**
	 * Metodo de negacion logica
	 *
	 * @param boolean $param1
	 * @return boolean
	 */
	public function not($param1) {
		return !$param1;
	}

	/**
	 * Metodo que ordena un array
	 *
	 * @param Array $array
	 * @return Array
	 */
	public function ordena($array) {
		asort($array);
		return $array;
	}
}
?>

Importante: Si cambiáis el nombre de alguno de los métodos, después de haber solicitado alguna vez el archivo WSDL lo más seguro es que os devuelva un error, por lo que deberéis eliminar los archivos creados en la caché que comienzan por "wsdl-*".

Si se prentende posteriormente tener el cliente y el servidor por separado, del código anterior, bastaría con tener el método clienteAction definido en el cliente, y eliminarlo de la parte de servidor.

¡¡¡Y esto es todo por el momento!!!

¡¡¡Cualquier comentario, mejora, o ayuda sobre este tema siempre será bienvenido!!!


[ad#Google Adsense]

Web Services con Zend Framework, 8.9 out of 10 based on 9 ratings
Comparte y disfruta:

Si te ha gustado este artículo, te puede interesar ...



Hosting barato

4 comments

  1. yeison
    VA:F [1.9.20_1166]
    Rating: +1 (from 1 vote)
    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)

    Muchas gracias por la información, esta fue de mucha utilidad.

  2. Sommer
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)

    Sería interesante puedas publicar un video con tu ejemplo, pues resultaría mas didáctico y mejor aprovechado por los estudiantes de PHP. Saludos

  3. Eider
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)

    Que etiquetas tengo que utilizar para que el zen me genere la parte de cabeceras en el wsdl?
    me refiero a las etiquetas como @param, ect

Escribe un comentario


× 5 = diez

Puede usar HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>