Banner

Ultima revisión 22/11/2012

Crear un Web Service con PHP y MySQL (Primeros pasos: Mi primer Web Service)

Antes de nada, si no habéis leído el articulo de introducción, os invito a que lo hagáis ya que dicho artículo pone de manifiesto los conceptos previos necesarios para entender como crear o implantar un servicio web. Podéis acceder a él pinchando en el siguiente enlace: Crear un Web Service con PHP y MySQL (Introducción).

La version 5 de PHP incorpora clases para la creacion de webservices y su invocacion desde clientes remotos mediante el uso de la extensión SOAP y que admite los subconjuntos de especificaciones SOAP 1.1, SOAP 1.2 y WSDL 1.1.

Instalación de la extensión SOAP

Lo primero que tenemos que hacer es configurar el php.ini de nuestro servidor:

Dentro del php.ini debemos descomentar la línea que activa la extensión de SOAP. Será algo parecido a extension=php_soap.dll y únicamente hay que eliminar el punto y coma de delante.

Opciones de configuración de SOAP
Nombre Por defecto Cambiable Descripción
soap.wsdl_cache_enabled 1 PHP_INI_ALL Activa o desactiva la función de almacenamiento en caché de WSDL
soap.wsdl_cache_dir /tmp PHP_INI_ALL Define el nombre del directorio donde la extensión SOAP guardará los ficheros en caché.
soap.wsdl_cache_ttl 86400 PHP_INI_ALL Define el número de segundos (tiempo de vida) por los que los ficheros en caché serán usados en lugar de los originales.
soap.wsdl_cache 1 PHP_INI_ALL Si la opción soap.wsdl_cache_enabled está activada, este ajuste determina el tipo de almacenamiento en caché. Puede ser cualquiera de estos tipos: WSDL_CACHE_NONE (0), WSDL_CACHE_DISK (1), WSDL_CACHE_MEMORY (2) o WSDL_CACHE_BOTH (3). También puede definirse usando el array options del constructor de SoapClient o de SoapServer.
soap.wsdl_cache_limit 5 PHP_INI_ALL Número máximo de ficheros WSDL almacenados en caché de memoria. Si se añaden más ficheros a una caché de memoria llena, se eliminarán los ficheros más antiguos de la misma.

Implementación o creación de la Clase con los métodos

Realmente la complicación de un servicio web no reside en la creación del mismo que como veremos es absolutamente simple. La dificultad está en las funcionalidades del propio servicio.

Lo primero que necesitamos para crear Web Service (o servicio web) es crear un listado de funciones o, en este caso, una clase PHP que contendrá todas las funcionalidades necesarias. Usaremos una clase sencilla ya que es nuestro primer ejemplo.

Aquí usamos la clase de islavisual para MySQL. podéis saber todo sobre ella pinchando en Clase de PHP para MySQL de Islavisual.

class UserService
{
    private $_EMAIL;
    private $_PASSWORD;
    include "clases/MySQL/mySql.class.php" ;
    
    public function login($email, $password)
    {
        $this->_EMAIL = mysql_real_escape_string($email);    // También puede servir addslashes
        $this->_PASSWORD = mysql_real_escape_string($password);    // También puede servir addslashes

        $user_id = $this->chechUser();
        if($user_id != "" && $user_id != NULL){
            $_SESSION['user_id'] = $user_id;
            return $user_id;
        }
        return false;
    }

    protected function checkUser()
    {
        $mysql = new mySQL;
        
        return $mysql->getValue("SELECT id FROM users WHERE email = '".$this->_EMAIL."';");
    }   
}

Implementación o creación del Servicio Web

Aquí sólo hay que crear un archivo que llamaremos servicio.php dónde estará incluída la clase que acabamos de crear. Como no queremos usar WSDL lo generaremos a mano y, por ello, debemos suministrar el namespace que será urn:webservices.

$server = new SoapServer(null, array('uri' => 'urn:webservices'));
 
// Asignamos la Clase
$server->setClass('UserService');
 
// Atendemos las peticiones
$server->handle();

Creamos un cliente que use el servicio

Esta parte es pura rutina porque es muy sencillo y, básicamente, siempre es lo mismo una y otra vez.

// Llamar al método como si fuera del cliente
$cliente = new SoapClient(null, array('location' => 'http://www.islavisual.com/servicio.php','uri' => 'urn:webservices', ));

echo $cliente->login('isla@hotmail.com', 'Visual12');

Y con esto ya tenemos creado nuestro primer WS.