jueves, 7 de julio de 2016

WEB SERVICES CON PHP - Parte IV

Los Servicios Web surgieron ante una necesidad de estandarizar la comunicación entre distintas plataformas (PC, Mainframe, Mac, etc.) y lenguajes de programación (PHP, C#, Java, etc.).

Anteriormente se habían realizado intentos de crear estándares pero fracasaron o no tuvieron el suficiente éxito, algunos de ellos son DCOM y CORBA, por ser dependientes de la implementación del vendedor DCOM - Microsoft, y CORBA - ORB (a pesar que CORBA de múltiples vendedores pueden operar entre si, hay ciertas limitaciones para aplicaciones de niveles más altos en los cuales se necesite seguridad o administración de transacciones).

Otro gran problema es que se hacía uso de RPC (Remote Procedure Call) para realizar la comunicación entre diferentes nodos. Esto, además de presentar ciertos problemas de seguridad, tiene la desventaja de que su implementación en un ambiente como es Internet, es casi imposible (muchos firewalls bloquean este tipo de mensajes, lo que hace prácticamente imposible a dos computadoras conectadas por Internet comunicarse).

Los Web Services surgieron para finalmente poder lograr la tan esperada comunicación entre diferentes plataformas. En la actualidad muchos sistemas legacy están pasando a ser web services.

Es por esto que en 1999 se comenzó a plantear un nuevo estándar, el cual terminaría utilizando XML, SOAP, WSDL, y UDDI.

¿Los Web services pueden ser solo utilizados con HTTP?

A pesar de mucho limitar el uso de los Web services al protocolo HTTP, los Web services no fueron pensados para un protocolo en particular, es decir, nada nos impide utilizar SOAP sobre algún otro protocolo de Internet (SMTP, FTP, etc.).

Se utiliza principalmente HTTP por ser un protocolo ampliamente difundido y que se encuentra menos restringido por firewalls (generalmente se bloquean puertos como el FTP, pero el HTTP es muy probable que no este bloqueado).

WEB SERVICES CON PHP - Parte III

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.
Veamos un ejemplo de un documento WSDL:

<?xml version="1.0"> 
<definitions> 
   <types> 
    ...
   </types> 
   <message> 
    ...
   </message> 
   <portType> 
    ...
   </portType> 
   <binding> 
    ...
   </binding> 
</definitions>
Explicación del código anterior:
<?xml version="1.0"> Este es otro documento XML, es por esto que debe comenzar con el tag <?xml .. ?>

<definitions> Comienzo del documento, este tag agrupa a todos los demás.

<types> Se definen los tipos de datos utilizados en el Web Service.

</types> Fin de la definición de tipos.

<message> 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> Fin de la definición de los parámetros.

<portType> Esta sección es la más importante, ya que se definen las operaciones que pueden ser realizadas, y los mensajes que involucran (por ejemplo el mensaje de petición y el de respuesta).

</portType> Fin de la definición de las operaciones y mensajes.

<binding> Se definen el formato del mensaje y detalles del protocolo para cada portType.

</binding> Fin de la definición del formato del mensaje y detalles del protocolo para cada PortType.

</definitions> Fin del documento WSDL

 UDDI - Universal Discovery Description and Integration
Es un modelo de directorios para Web Services. Es 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.
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.

WEB SERVICES CON PHP - Parte II

SOAP

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. Esta basado en XML y es la base principal de los Web Services. Los mensajes SOAP son documento XML propiamente dicho, pero esto lo veremos más adelante cuando veamos un ejemplo de un mensaje SOAP.

Veamos como es la estructura básica del protocolo y la correspondiente explicación:
<?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>
         ...
      </soap:Header>
      <soap:Body>
         ...
         <soap:Fault>
            ...
         </soap:Fault>
      </soap:Body>
</soap:Envelope>

Explicación del código anterior:
<?xml version="1.0"?>
Como podemos ver en esta linea SOAP es un documento XML, y como tal, debe comenzar con el tag <?xml….?> y la versión correspondiente.

<soap:Envelope
Aquí se indica que comienza el envelope (sobre) del mensaje

xmlns:soap = "http://www.w3.org/2001/12/soap-envelope"
Un mensaje SOAP debe contener siempre un elemento envelope asociado con el namespace (espacio de nombres) http://www.w3.org/2001/12/soap-envelope

Soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
En esta línea lo que se hace es indicar donde se encuentran definidos los tipos de datos utilizados en el documento.

<soap:Header>
Esta línea 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>
Como todo documento XML los tags que son abiertos deben ser cerrados, esta línea indica la finalización del Header (encabezado).

<soap:Body>
Aquí comienza el 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>
Cualquier tipo de fallo que se produzca será notificado en esta sección. La cual esta contenida dentro del cuerpo del mensaje.

</soap:Fault>
Cierre de la sección Fault.

</soap:Body>
Indica el final del cuerpo del mensaje.

</soap:Envelope>
Fin del mensaje SOAP.

WEB SERVICES CON PHP - Parte I

Web Service:

Es un sistema software diseñado para soportar la interoperabilidad máquina - máquina a través de una red. Este tiene una interfaz descripta en un formato que puede ser procesado por una máquina (específicamente WSDL, que veremos más adelante). Otros sistemas interactúan con el Web service utilizando mensajes SOAP los cuales se encuentran establecidos previamente.

Entonces podríamos decir que un Web Service es una comunicación por medio de mensajes SOAP (son mensajes especiales que más adelante veremos detenidamente) entre diferentes equipos a través de una red.

Ahora pasaremos a definir los elementos que componen a los Web Services, para luego ver como ellos estan interrelacionados.

¿Qué es XML, SOAP, WSDL, UDDI?

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

XML - eXtensible Markup Language:

Es un subconjunto simplificado del SGML el cual fue diseñado principalmente para documentos Web. Deja a los diseñadores crear sus propias “etiquetas” o "tags" (Ej: <libro>), habilitando la definición, transmisión, validación, y la interpretación de datos entre aplicaciones y entre organizaciones. Un punto que considero 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> 
Seguramente este tipo de archivos no sea una novedad para la mayoría de los que lean este artículo, ya que muchos documentos en Internet están en formato XML. Igualmente explicaremos brevemente las secciones del mismo:
<?xml version="1.0" encoding="UTF-8"?>
Todo documento XML debe comenzar indicando que es un documento XML, la versión del mismo y su codificación. Es por eso que se utiliza el tag <?xml .... ?> . Todos los elementos a partir de aquí son definidos por el usuario.

<vehiculos>
Luego se indica un tag raiz (<vehiculos>) el cual contendrá a los demás elementos. Es como en HTML el tag <HTML> .. </HTML>, que dentro de el se encuentran los demás tags. Se lo conoce generalmente como root del documento.

<coche>
Luego definimos un tag <coche> el cual contendrá un coche en particular (en este caso solo incorpore 3 características de un coche: marca, modelo, y fecha de compra).

<marca>Toyota</marca>
<modelo>Corolla</modelo>
<fechaCompra>2002</fechaCompra>
Se definen 3 tags (marca, modelo, y fechaCompra), los cuales contienen los datos para un coche en particular.

<vehiculos>
   <coche>
      <marca>..</marca>
      <modelo>..</modelo>
      <fechaCompra>..</fechaCompra>
   </coche>
</vehiculos>
En el documento podemos apreciar que todos los tags que son abiertos <marca> deben ser cerrados </marca>. Esto es una exigencia del XML.

Se pueden anidar tags <coche><marca></marca>…..</coche>. Marca esta dentro del tag coche. El XML provee muchas otras posibilidades como puede ser que las etiquetas tengan atributos (<coche color="rojo">..</coche>), pero no nos detendremos en ellas ya que la idea es simplemente ofrecer los conceptos básicos para conocer de que se trata el mundo de los Web Services.