Banner

Ultima revisión 25/01/2013

Crear un Web Service con PHP y MySQL (Introducción)

Una API (Application Programming Interface o Interfaz de programación de aplicaciones) es un conjunto de funciones y métodos que ofrece una biblioteca que permite su utilización de forma remota como una capa de abstracción. Google, por ejemplo, tiene la Google SOAP Search API que permite a los desarrolladores consultar entre los millones de páginas web indexadas por Google directamente desde una aplicación cualquiera usando un Web Service, a través de los estándar SOAP y WDSL.

Un Web Service o Servicio Web, por su parte, es un sistema software diseñado para soportar la interoperabilidad 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. Las máquinas interactúan con el Web service utilizando unos mensajes especiales llamodos SOAP que se han de establecer previamente.

Para conocer cómo se realiza el intercambio de mensajes en los Web Services debemos primero debemos entender los elementos fundamentales que lo componen. Estos son el XML, SOAP, WSDL, y UDDI.

XML (Extensible Markup Language)

Es un subconjunto simplificado del SGML (Standard Generalized Markup Language o Estándar de Lenguaje de Marcado Generalizado) que fue diseñado principalmente para documentos Web. Se caracteriza porque permite crear “etiquetas o tags propias (véase <libro>), habilitando la definición, transmisión, validación, y la interpretación de datos entre aplicaciones y entre organizaciones. Un punto que es importante aclarar es que el HTML y el XML tienen funciones diferentes. El HTML tiene por objeto mostrar información, mientras que el XML se ocupa de la información propiamente dicha (el contenido). Este concepto es importante tenerlo en cuenta, ya que muchas personas al escuchar sobre XML piensan que es el sucesor de HTML.

Ejemplo de un documento XML sobre información de autos:

<?xml version="1.0" encoding="UTF-8"?> 
<vehiculos> 
  <coche> 
      <marca>Toyota</marca> 
      <modelo>Corolla</modelo> 
      <fechaCompra>2002</fechaCompra> 
  </coche> 
  <coche> 
      <marca>Honda</marca> 
      <modelo>Civic</modelo> 
      <fechaCompra>2003</fechaCompra> 
  </coche> 
</vehiculos>

SOAP (Simple Object Access Protocol)

Es un protocolo que permite la comunicación entre aplicaciones a través de mensajes por medio de Internet. Es independiente de la plataforma, y del lenguaje. Está basado en XML y es la base principal de los Web Services. Los mensajes SOAP son documento XML propiamente dicho.

<?xml version="1.0"?>
<soap:Envelope  xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
        soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
    <soap:Header> 
        // Definición de la cabecera del mensaje. Incluye información específica del mensaje, 
        // como puede ser la autenticación.
    </soap:Header> 
    <soap:Body> 
        // Definición o descripción del cuerpo del mensaje, en esta sección se incorpora toda la información 
        // necesaria para el nodo final. Por ejemplo, los parámetros para la ejecución, o la respuesta a una
        // petición.
        <soap:Fault> 
            // Todos los fallos que se puedan producir se deben notificar aquí.
        </soap:Fault> 
    </soap:Body> 
</soap:Envelope>

Explicación del código anterior

  • <?xml version="1.0"?> Como se puede apreciar, SOAP, es un documento XML, y como tal, debe comenzar con el tag <?xml….?> y la versión correspondiente.
  • <soap:Envelope indica que comienza el envelope (sobre) del mensaje.
  • xmlns:soap = "http://www.w3.org/2001/12/soap-envelope" que viene a decir que en un mensaje SOAP siempre se debe asociar el elemento envelope al namespace (espacio de nombres) http://www.w3.org/2001/12/soap-envelope.
  • soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> indica dónde se encuentran definidos los tipos de datos utilizados en el documento.
  • <soap:Header> indica el comienzo del Header (encabezado). En esta sección se incluye información específica del mensaje, como puede ser la autenticación.
  • </soap:Header> indica el final del Header (encabezado).
  • <soap:Body> indica el inicio del cuerpo del mensaje, en esta sección se incorpora toda la información necesaria para el nodo final. Por ejemplo, los parámetros para la ejecución, o la respuesta a una petición.
  • <soap:Fault> que se utiliza para que cualquier tipo de fallo que se produzca se notifique en esta sección y que, como se observa, está contenida dentro del cuerpo del mensaje.
  • </soap:Fault> cierra de la sección Fault.
  • </soap:Body> indica el final del cuerpo del mensaje.
  • </soap:Envelope> indica el final del mensaje SOAP.

WSDL (Web Services Description Language)

Es un protocolo basado en XML que describe los accesos al Web Service. Podriamos decir que es el manual de operación del web service, porque nos indica cuales son las interfaces que provee el servicio web y los tipos de datos necesarios para la utilización del mismo.

<?xml version="1.0">
<definitions>
    <types>
        // definición de los tipos de datos utilizados en el Web Service
    </types>
    <message>
        // definición de los métodos y parámetros para realizar la operación. Cada message puede consistir en una o
        // más partes (parámetros)
    </message>
    <portType>
        // definición de las operaciones que pueden ser realizadas, y los mensajes involucrados 
        // (por ejemplo el mensaje de petición y el de respuesta). Es la parte más importante.
    </portType>
    <binding>
        // definiciones de los formatos de los mensajes y detalles del protocolo para cada portType
    </binding>
</definitions>

Explicación del código anterior

  • <?xml version="1.0"> es otro documento XML, es por esto que debe comenzar con el tag <?xml .. ?>
  • <definitions> indica el comienzo del documento, este tag agrupa a todos los demás.
  • <types> que es dónde se definen los tipos de datos utilizados en el Web Service.
  • </types> que indica el final de la definición de tipos.
  • <message> que es dónde se definen los métodos y parámetros para realizar la operación. Cada message puede consistir en una o más partes (parámetros).
  • </message> que indica el final de la definición de los parámetros.
  • <portType> dónde se definen las operaciones que pueden ser realizadas, y los mensajes involucrados (por ejemplo el mensaje de petición y el de respuesta). Es la parte más importante.
  • </portType> que es el final de la definición de las operaciones y mensajes.
  • <binding> dónde se define el formato del mensaje y detalles del protocolo para cada portType.
  • </binding> que finaliza la definición del formato del mensaje y detalles del protocolo para cada PortType.
  • </definition> que es para indicar el final del documento WSDL

Tenéis un buen ejemplo en el artículo Paso de Parámetros en SOAP con Estructuras complejas dónde se explica como realizar un Web Service con WSDL y tipos de datos simples.

UDDI (Universal Discovery Description An Integration)

Es un modelo de directorios para Web Services. Una especificación para mantener directorios estandarizados de información acerca de los Web Services, sus capacidades, ubicación, y requerimientos en un formato reconocido universalmente. UDDI utiliza WSDL para describir las interfaces de los Web Services.

Dicho de otra manera, es un lugar en el cual podemos buscar cuales son los Servicios web disponibles, una especie de directorio en el cual podemos encontrar los Web Services publicados y publicar los Web Services que desarrollemos.

Siguiente capítulo: Crear un Web Service con PHP y MySQL (Primeros pasos: Mi primer Web Service).