Conectándonos a WebServices usando PHP

By

Qué son los WebServices

Hoy en día es raro encontrar una aplicación que resuelva todas sus necesidades sin interactuar con otras.

Las formas de interactuar son diversas, dependiendo de qué tipos de recursos compartan esas aplicaciones.

Por ejemplo, si se trata de aplicaciones que están ejecutándose en la misma computadora, la comunicación puede realizarse a través de un archivo (o espacio de memoria) compartido sin necesidad de una gran complejidad.

Cuando se trata de comunicar dos aplicaciones que están físicamente distribuidas el medio compartido es la red y la comunicación se realiza de proceso a proceso mediante algún protocolo.

Cuando esta comunicación tiene lugar a través de Internet, es muy común utilizar como base el protocolo HTTP.

En esto se basan los WebServices (Servicios Web).

Se trata de un modo de utilizar la infraestructura pre-existente para potenciar aplicaciones.

Su nombre deriva del hecho de que, desde el punto de vista del servidor, es indistinto si el cliente es un navegador web (Que actúa por orden de un usuario real) u otro sistema.

La utilidad de los WebServices (desde el punto de vista del consumidor) consiste en el aumento inmediato de la funcionalidad de la propia aplicación a un costo muy bajo. De alguna forma puede pensarse en un WebService como una biblioteca de funciones estándar (Sólo que en lugar de tener que administrar el código y alojarlo en el mismo servidor, se utiliza en forma remota).

Otra ventaja de los WebServices es la posibilidad de integrar, de una forma simple, aplicaciones escritas por diferentes equipos de desarrollo (incluso en diferentes lenguajes de programación). Este punto proporciona una posibilidad a empresas pequeñas de brindar servicios acotados a un gran número de clientes (y cobrar por ello).

Los estándares más comunes para la creación (y consumo) de WebServices son SOAP (Simple Object Access Protocol) y REST (Representational State Transfer).

Cada uno de ellos define la forma en que un servidor debe interpretar los pedidos que le realicen sus clientes y en qué formato debe enviar las respuestas de modo que el cliente pueda procesarlas.

SOAP se basa en el intercambio de XML. El formato no es muy simple de leer, afortunadamente, en PHP contamos con buenas herramientas para usarlo.

    REST por el otro lado es un protocolo mucho más simple, se trata una capa muy fina por encima de HTTP.

    Dada la complejidad de SOAP respecto de la simplicidad de REST, y para no extender demasiado este artículo me concentraré en el consumo de servicios REST (Que, por otro lado, son los más utilizados actualmente). Si quieres conocer más sobre cómo usar SOAP con PHP puedes leer este artículo.

Cómo acceder a un WebService REST usando PHP

    Realizar una petición REST no es en esencia muy diferente a realizar cualquier tipo de petición HTTP.

    Algo tan sencillo como hacer:

curl https://sg.com.mx/  

    Es, de hecho, una petición REST.

    Veamos un ejemplo en php:

<?php

echo file_get_contents('https://xkcd.com/info.0.json').PHP_EOL;

   Con este simple script obtenemos el resultado de invocar a la API de xkcd

   En este caso estamos enviando una petición de tipo GET (La más simple). 

   Dependiendo del acceso que tengamos en el servidor podremos también enviar peticiones de otro tipo (POST, PUT o DELETE).

   Hoy en día lo más común es ver texto JSON asociado a intercambios basados en REST más que XML, sin embargo, como REST es un protocolo de intercambio de texto, cualquier formato basado en texto podría formar una respuesta aceptable (Dependerá sencillamente del acuerdo entre el servidor y el cliente).

   Una vez obtenido el texto de la respuesta, es responsabilidad del cliente interpretar este resultado y hacer algo útil con él.

   En el caso de php, esto se realiza mediante el uso de la función json_decode

<?php

print_r json_decode(  file_get_contents('https://xkcd.com/info.0.json'), true).PHP_EOL;

   O bien:

<?php

$response = json_decode(  file_get_contents('https://xkcd.com/info.0.json'), true);

echo $response['month'];

   En este caso estamos utilizando la función file_get_contents porque se trata de una llamada sencilla.

   Existen casos en los que la llamada puede resultar algo más compleja (Por ejemplo, si tenemos que realizar algún tipo de autenticación).

   Si ese fuese el escenario, podríamos utilizar las funciones de la librería cURL o algo más elaborado como Guzzle.

Conclusión

  Conectar aplicaciones PHP a webservices basados en REST es muy sencillo.

  Te queda el desafío de encontrar qué capacidades quieres agregarle a tus aplicaciones y qué servicios hay disponibles ahí afuera para que los puedas aprovechar… ¡a cazar! :)