Saltar la navegación

2.2.2.- Creación de un servicio web (III).

Imagen de un esquema de la utilización de una clase para procesar las peticiones que se reciban en un servicio web.
Elaborado con DIA (Elaboración propia.)

Vimos que es aconsejable definir una clase que implemente los métodos que queramos publicar en el servicio.

class Operaciones{
    public function resta($a, $b) {
        return $a - $b;
    }
    public function suma($a, $b){
        return $a + $b;
    }
    public function saludo($texto){
        return "Hola $texto";
    }
}

Y que al hacerlo de esta forma, en lugar de añadir una a una las funciones, podemos añadir la clase completa al servidor utilizando el método setClass de SoapServer. Lo ideal es que la clase con las funciones la implementemos en un archivo aparte y la llamemos con "require".

require '../src/Operaciones.php';
$uri='http://localhost/unidad6/servidorSoap';
$parametros=['uri'=>$uri];
    try {
        $server = new SoapServer(NULL, $parametros);
        $server->setClass('Operaciones');
        $server->handle();
    } catch (SoapFault $f) {
        die("error en server: " . $f->getMessage());
}

En lugar de una clase, también es posible indicar un objeto para procesar las peticiones SOAP utilizando el método "setObject" de la clase "SoapServer".

Aunque como ya sabes, "PHP SOAP" no genera el documento WSDL de forma automática para los servicios que crees, existen algunos mecanismos que nos permiten generarlo, aunque siempre es aconsejable revisar los resultados obtenidos antes de publicarlos. Una de las formas más sencillas es utilizar la librería php2wsdl,disponible desde Composer.

Librería php2wsdl.

Esta librería revisa los comentarios que hayas añadido al código de la clase que quieras a publicar (debe ser una clase, no funciones aisladas), y genera como salida el documento WSDL correspondiente.

Para que funcione correctamente, es necesario que los comentarios de las clases sigan un formato específico: el mismo que utiliza la herramienta de documentación PHPDocumentor.

Para saber más

PHPDocumentor es una herramienta de código libre para generación automática de documentación, similar a Javadoc (para el lenguaje Java). Si comentamos el código de nuestras aplicaciones siguiendo unas normas, PHPDocumentor es capaz de generar, a partir de los comentarios que introduzcamos en el código mientras programamos, documentación en diversos formatos. En el enlace dejado puedes consultar la documentación.

 Aunque esta herramienta está en Packagist, para instalarla nos recomiendan bajarnos el fichero PHAR correspondiente. Si vas a usar PHPDocumentor asegúrate de tener activada e instalada la extensión "php-iconv" .

PHPDocumentor.

Para generar correctamente el documento WSDL con php2wsdl los métodos deben estar comentados siguiendo las reglas de PHPDocumentor. Los comentarios se deben ir introduciendo en el código distribuidos en bloques, y utilizando ciertas marcas específicas como "@param" para indicar un parámetro y "@return" para indicar el valor devuelto por una función, además para indicar los métodos que queremos que se generen en WSDL utilizar usaremos "@soap".

class Operaciones{
     /**
     * @soap
     * @param float $a
     * @param float $b
     * @return float
     */
    public function resta(float $a, float $b) :float{
        return $a - $b;
    }
    /**
     * @soap
     * @param float $a
     * @param float $b
     * @return float
     */
    public function suma($a, $b){
        return $a + $b;
    }
    /**
     * @soap
     * @param  string $texto
     * @return string
     */
    public function saludo($texto){
        return "Hola $texto";
    }
}