Hola, esta semana veremos como podemos crear un servicio web con PHP y sobre todo, como podemos consumirlo en nuestra web. Comenzaremos explicando que es y para que sirve un servicio web y después nos pondremos manos a la obra creando y consumiendo un sencillo servicio web.

¿Qué es y para que sirve un servicio web?

Un servicio web es una tecnología que utiliza un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones. Con esto se consigue que aplicaciones desarrolladas en distintos lenguajes de programación puedan intercambiar datos al utilizar estándares abiertos.

Existen varias razones por las que utilizar servicios web en nuestras aplicaciones, la primera de ellas es que el intercambio de datos se realiza por el puerto HTTP, ya que no está bloqueado. Y la razón más convincente para usar servicios web es que aporta una gran independencia entre la aplicación que consume el servicio web y el propio servicio.

Hay varios estándares que se emplean para el desarrollo y comunicaciones entre servicios web y clientes de servicio, algunos de estos son los siguientes:Protocólos y


  • XML (Extensible Markup Language): Es el formato estándar para los datos que se intercambian entre servicio y cliente.
  • SOAP (Simple Object Access Protocol): Es uno de los protocolos sobre los que se establece el intercambio.
  • WSDL (Web Services Description Language): Es el lenguage de la interfaz pública para los servicios web.
  • UDDI (Universal Description Discovery and Integration): Protocolo para publicar la información de los servicios web.
  • WS-Security (Web Service Security): Protocolo de seguridad aceptado como estándar por OASIS.
  • Otros protocolos: HTML, FTP, SMTP,…

Creando un servicio web con PHP

Para crear un servicio web, lo primero que necesitaremos, son unos datos que retornar en la llamada a nuestro servicio web. Para ello hemos de crear una base de datos, que en nuestro caso solamente contendrá una tabla, desde donde sacaremos los datos que retornaremos. Es script que hemos utilizado para crear nuestra base de datos es el siguiente.

Download
-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 10-07-2013 a las 18:52:05
-- Versión del servidor: 5.5.8
-- Versión de PHP: 5.3.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de datos: `webservice`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `productos`
--

CREATE TABLE IF NOT EXISTS `productos` (
`id_producto` int(11) NOT NULL,
`nombre` varchar(50) NOT NULL,
`pvp` double NOT NULL,
PRIMARY KEY (`id_producto`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `productos`
--

INSERT INTO `productos` (`id_producto`, `nombre`, `pvp`) VALUES
(1, 'producto 1', 1.25),
(2, 'producto 2', 2.5),
(3, 'producto 3', 3.75),
(4, 'producto 4', 4);

Una vez creados los datos comenzaremos a escribir el código PHP de nuestro servicio web, para ello seguiremos los siguientes pasos.

1.- Nos crearemos una clase de acceso a datos; esta clase no es necesaria, pero a mi me gusta hacerla con el fin de que el código en el resto de clases quede más legible al programador. Para este propósito nos crearemos dos clases, globals.php y dbmanager.php.

La primera de ellas contendrá los parámetros de acceso a nuestra base de datos, escribiremos el siguiente código.

class config{
public static function getBBDDServer() {
return 'localhost';
}

public static function getBBDDName(){
return 'webservice';
}

public static function getBBDDUser(){
return 'root';
}

public static function getBBDDPwd(){
return 'admin';
}
}
Download

La segunda clase, contiene el código de acceso a base de datos.

include_once('globals.php');

class dbmanager{

public function executeQuery($sql){
$con = mysql_connect(config::getBBDDServer(), config::getBBDDUser(), config::getBBDDPwd());
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db(config::getBBDDName(), $con);

$result = mysql_query($sql);

mysql_close($con);
return $result;
}
}
Download

2.- Una vez creadas las clases de acceso a los datos tenemos que crear la clase se encargará de la lógica de nuestro servicio, es decir, el motor de nuestro servicio, ya que será la última clase que se ejecute a la hora de invocar a nuestro servicio. En nuestro servicio se llamará ProductoManager y solo contendrá un método llamado getProductos(), el cual devolverá una lista de productos guardados en nuestra base de datos.

include_once('globals.php');
include_once('dbmanager.php');
class ProductoManager
{
public function getProductos() {
$marcas = array();
$sql = 'select id_producto, nombre, pvp from productos';
$db = new dbmanager();
$result = $db->executeQuery($sql);
while($row = mysql_fetch_array($result)) {
$producto = new Producto();
$producto->id_producto = $row['id_producto'];
$producto->nombre = $row['nombre'];
$producto->pvp = $row['pvp'];
$marcas[] = $producto;
}
mysql_free_result($result);
mysql_close($con);
return $marcas;
}
}
class Producto {
public $id_producto;
public $nombre;
public $pvp;
}
Download

3.- Y por último, para hacer público nuestro servicio web necesitaremos un handler, esto es, un manejador que será el encargado de invocar a la función necesaria a partir de los parámetros de llamada. Para esto creamos otro fichero webservice.php.

include('Producto.class.php');
$options = array('uri' => 'http://localhost/');
$server = new SoapServer(NULL, $options);
$server->setClass('ProductoManager');
$server->handle();
Download

Con esto tendremos creado el servicio web que estábamos buscando, este servicio responde al siguiente WSDL.

Download

Consumiendo nuestro servicio web

Una vez creado el servicio crearemos un cliente para probar que, en efecto, retorna los datos que nos hemos propuesto. Para ello nos crearemos un fichero php, en el mismo u otro proyecto distinto con el siguiente código

Download

Lo ejecutamos desde un navegador escribiendo la siguiente URL “http://localhost/webservice/index.php” y en la siguiente pantalla debemos estar visualizando los mismos datos que creamos en la tabla productos en el script inicial.

Aquí os dejo el ejemplo completo.

Referencia: Desarrollo Web Studio
PHP