Web Services

Web Services


Un Web Service o Servicio Web es un sistema de software diseñado para soportar la interacción interoperable de máquina a máquina en una red. En el contexto de aplicaciones Web, usualmente se refiere a un conjunto de APIs que se pueden acceder a través de Internet y ejecutar en un sistema remoto que aloja el servicio solicitado.

Por ejemplo, un cliente basado en tecnología Flex puede invocar una función implementada en el lado del servidor que ejecuta una aplicación Web basada en PHP. El Servicio Web se basa en SOAP como su capa base de la pila de protocolos de comunicación.

Yii proporciona CWebService y CWebServiceAction para simplificar el trabajo de la aplicación del servicio Web en una aplicación Web. La API se agrupa en clases, llamadas proveedores de servicios. Yii generará para cada clase una especificación WSDL que describe qué APIs están disponibles y cómo debe invocarse por el cliente. Cuando un cliente invoca una API, Yii creará una instancia del proveedor correspondiente y llamar a la API solicitada para completar la solicitud.

1. Definición de proveedor de servicios
Como mencionamos anteriormente, un proveedor de servicio es una clase que define los métodos que pueden invocarse de forma remota. Yii depende de los doc comment y de la clase reflection para identificar los métodos que se pueden invocar remotamente y cuáles son sus parámetros y valor de retorno.

Vamos a comenzar llamando un servicio de una simple bolsa de valores. Este servicio permite a un cliente solicitar la cotización de las acciones especificadas. Definimos como sigue el proveedor de servicios. Tenga en cuenta que definimos la clase de proveedor StockController extendiendo CController.

class StockController extends CController
{
    /**
     * @param string the symbol of the stock
     * @return float the stock price
     * @soap
     */
    public function getPrice($symbol)
    {
        $prices=array('IBM'=>100, 'GOOGLE'=>350);
        return isset($prices[$symbol])?$prices[$symbol]:0;
        //...return stock price for $symbol
    }
}

En el ejemplo anterior, declaramos el método getPrice para ser una API del servicio Web y lo marcamos con la etiqueta @soap en su comentario con el fin de especificarle a Yii que este será un método de acceso desde el Web Service. En los comentarios también podemos especificar el tipo de datos de los parámetros de entrada y el valor de retorno.

2. Declaración de las acciones del Web Service
Teniendo definido el proveedor de servicios, tenemos que ponerlo a disposición de los clientes. En particular, queremos crear una acción de controlador para exponer el servicio. Esto puede hacerse fácilmente creando una acción CWebServiceAction en una clase Controller. Para nuestro ejemplo, lo pondremos en StockController.

class StockController extends CController
{
    public function actions()
    {
        return array(
            'quote'=>array(
                'class'=>'CWebServiceAction',
            ),
        );
    }
 
    /**
     * @param string the symbol of the stock
     * @return float the stock price
     * @soap
     */
    public function getPrice($symbol)
    {
        $prices=array('IBM'=>100, 'GOOGLE'=>350);
        return isset($prices[$symbol])?$prices[$symbol]:0;
        //...return stock price for $symbol
    }
}

Eso es todo lo que necesitamos para crear un servicio Web. Si intentamos acceder a la acción por la URL http://hostname/path/to/index.php?r=stock/quote, vamos a ver un montón de contenido XML que es realmente el WSDL del servicio Web que hemos definido.

3. Consumo de servicio Web
Para completar el ejemplo, vamos a crear un cliente para consumir el Web Service que acabamos de crear. El cliente del ejemplo está escrito en PHP, pero podría ser en otros lenguajes, como Java, C#, Flex, etc..

$client=new SoapClient('http://hostname/path/to/index.php?r=stock/quote');
echo $client->getPrice('GOOGLE');

Ejecutar el script anterior en el modo Web o consola y veremos 350 que es el precio para GOOGLE.

Fuente | http://www.yiiframework.com/doc/guide/1.1/es/topics.webservice
Este texto ha sido traducido literalmente de la fuente citada, donde se pueden encontrar mas detalles del articulo.

3 Responses to “Web Service con SOAP y Yii Framework”

  1. Segui el ejemplo al pie de la letra, y a mi me arroja un error 404, yo tengo instalado el yii 1.1.13,
    y tengo habilitado el soap, también trate de cambiar la url a la siguiente manera:

    http://hostname/path/to/index.php/stock/quote y me manda a la pagina principal y no me imprime el numero que deberia imprimirme,

    No se si me falta algo por hacer u olvido algo

    Gracias

  2. truncks78 says:

    Gracias, me ayuda bastante

  3. Justo lo que buscaba. Excelente. Gracias.

Leave a Reply