Demo31 Demos y Tutoriales Zend Framework, PHP, MySQL, SEO, GoogleAnalytics, WordPress, Blogspot


8dic/102

Web Services con Zend Framework



VN:F [1.9.6_1107]
Rating: 5.5/10 (4 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, 5.5 out of 10 based on 4 ratings
Comparte y disfruta:

  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Add to favorites
  • BarraPunto
  • email
  • LinkedIn
  • Meneame
  • MSN Reporter
  • MySpace
  • Netvibes
  • PDF
  • Technorati
  • Twitter
  • Wikio IT

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

Comentarios (2) Trackbacks (0)
  1. VA:F [1.9.6_1107]
    Rating: 0 (from 0 votes)

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

  2. VA:F [1.9.6_1107]
    Rating: 0 (from 0 votes)

    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


Leave a comment

(required)

*


Aún no hay trackbacks.