La conexión de tus aplicaciones php con WebServices REST te permitirá ampliar tus capacidades apoyándote en servicios de grandes compañías.
Los detalles específicos dependen de las definiciones que haya realizado el productor del servicio pero, para no encontrarte con sorpresas, es buena idea tener claras las bases.
Repasemos los conceptos comunes a todo Servicio Web REST.
Qué es un webservice
Un webservice (o servicio web) es una forma de integrar aplicaciones web.
Básicamente se trata de un servidor que expone parte de su funcionalidad para que sus clientes (que generalmente son otros servidores de diferentes aplicaciones) puedan utilizarlas.
Las principales ventajas de usar web services son:
- La posibilidad de valernos de la capacidad instalada (¡y mantenida!) por terceros
- La facilidad para extender la funcionalidad de nuestra aplicación (Basta con realizar las llamadas al servicio web que deseamos)
La principal desventaja de usar este enfoque es que dependemos de servicios de terceros que, salvo en casos muy puntuales, no podemos controlar.
Ejemplos de webservices:
- Autenticación de usuarios vía Facebook, Google, Twitter, etc…
- Generación de mapas en tiempo real
- Consulta de cotizaciones de acciones
Qué es RESTful
RESTful es un modelo arquitectónico de software que plantea una suerte de volver a las fuentes.
Su filosofía se basa en el poder del protocolo HTTP (Subyacente en toda aplicación web), el cual incluye los conceptos de verbo (GET, POST, DELETE, PUT), recurso, código de errores (404, 500, etc…) y demás elementos que, en teoría al menos, deberían alcanzar para modelar cualquier tipo de interacción cliente-servidor.
Es muy común que en una aplicación RESTful los objetos o entidades del modelo de datos sean expuestos casi directamente, teniendo una URL específica para cada uno de ellos.
Por ejemplo, en una aplicación diseñada para una institución educativa sería esperable encontrarse con una URL de tipo:
http://miescuela.com/alumnos
Al realizar una petición de tipo GET a esta URL se esperará recibir información de los alumnos de esa institución.
A su vez, una URL del tipo:
http://miescuela.com/alumnos/14
Debería darme información del alumno cuyo id es 14.
Existe mucha controversia respecto de qué es una API RESTful y qué no lo es…
Sin entrar en mayor detalle, la idea es que, para consumir un servicio web basado en REST sólo se requiere conocer su URL (De nuevo, esto es en teoría… en la práctica se utilizan varias formas de modificación del pedido, como ser el envío de headers y demás).
Siendo que se trata de un servicio RESTful, la comunicación entre cliente y servidor es sencilla (A diferencia de lo que es un WebService SOAP), se trata simplemente de enviar un pedido HTTP y procesar su respuesta.
Cómo realizar peticiones REST con PHP
Existen varias opciones disponibles, veamos las más comúnmente utilizadas:
cURL
La librería cURL permite realizar peticiones a servidores remotos.
Si bien funciona, es un método de bastante bajo nivel, con sus pros y sus contras.
Volviendo al ejemplo que te comentaba antes, una forma de hacer la llamada sería esta:
<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://miescuela.com/alumnos"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $res = curl_exec($ch); curl_close($ch);
En la variable $res quedará la respuesta del webservice (Asumiendo por supuesto que no haya habido ningún problema de conexión, transferencia, etc…).
file_get_contents
Una opción alternativa (y generalmente más conveniente) es el uso de la función file_get_contents.
Esta función recibe como parámetro el nombre del archivo que se quiere leer y devuelve todo su contenido como un string.
Si bien el uso normal de la función es la lectura de archivos locales, php en realidad entiende a los archivos como flujos. Por lo tanto, si está todo bien configurado, una URL puede usarse como nombre de un flujo.
De este modo nos ahorramos muchas de las complicaciones propias de tratar con una interface de más bajo nivel (y, obviamente, perdemos cierto control, pero generalmente no es necesario hilar tan fino).
El ejemplo sería:
<?php
$res = file_get_contents("http://miescuela.com/alumnos");
Cómo se procesan los resultados
Los resultados se procesan de acuerdo al formato de la respuesta.
Usualmente los Servicios Web devuelven XML o JSON (Existen otras posibilidades, claro, pero estas son las más comunes).
En el caso de tratarse de un XML, lo mejor es usar la biblioteca SimpleXML, si se trata de json, con json_decode será suficiente.
Si se trata de otro formato habrá que estudiar el caso puntual, pero en última instancia, siempre se trata de procesar un string…
Ejemplo de consumor de un WebService REST con PHP
MercadoLibre tiene una API RESTful que permite interactuar con el sitio de forma simple.
Veamos un ejemplo de una llamada de acceso público: la que nos da información básica de un usuario.
La URL que se utiliza es https://api.mercadolibre.com/users/USERID/
Por ejemplo https://api.mercadolibre.com/users/226384143/ retorna:
{
"id": 226384143,
"nickname": "TETE9928972",
"registration_date": "2016-08-25T11:36:00.000-04:00",
"country_id": "AR",
"address": {
"city": "Palermo",
"state": "AR-C"
},
"user_type": "normal",
"tags": [
"normal",
"test_user",
"user_info_verified"
],
"logo": null,
"points": 100,
"site_id": "MLA",
"permalink": "http://perfil.mercadolibre.com.ar/TETE9928972",
"seller_reputation": {
"level_id": null,
"power_seller_status": null,
"transactions": {
"canceled": 0,
"completed": 0,
"period": "historic",
"ratings": {
"negative": 0,
"neutral": 0,
"positive": 0
},
"total": 0
}
},
"buyer_reputation": {
"tags": []
},
"status": {
"site_status": "active"
}
}
Un string JSON.
El código completo para obtener esta información con php es:
<?php
echo file_get_contents('https://api.mercadolibre.com/users/226384143/');
Claro que si quisiéramos hacer algo con esta información sería más conveniente hacer algo como:
<?php
$data = json_decode( file_get_contents('https://api.mercadolibre.com/users/226384143/'), true );
echo $data['nickname'];
¡Listo! Ya estás en condiciones de integrar cualquier WebService RESTful en tu aplicación.
Más información sobre WebServices con PHP
Como te decía al comienzo, otro protocolo muy utilizado a la hora de conectar aplicaciones a través de Servicios Web es SOAP. Este protocolo es bastante más complejo que RESTful, principalmente porque se basa en intercambios de XML con un formato bastante particular.
Puedes intentar leer e interpretar estos XML por tus propios medios aunque lo más recomendable es utilizar las herramientas que PHP ofrece para ello.
De hecho, si te enfrentas a WebServices de basados en SOAP php tiene un soporte nativo muy completo.

¿Te quedó alguna duda? Publica aca tu pregunta