Crear un cliente REST en PHP

Dado que los servicios REST dependen de HTTP, es seguro asumir que escribir clientes con PHP CURL debería ser un proceso bastante sencillo. Creemos un archivo rest-service/client/index.php con el siguiente contenido:

<?php
$ch = curl_init();
$headers = [
'Content-Type: application/json',
'X-AUTH-TOKEN: some-auth-token-here'
];
curl_setopt($ch, CURLOPT_URL, 'http://rest-service.server/user/welcome');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['name' => 'John']));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;

La herramienta de red Wireshark nos dice que este código genera la siguiente solicitud HTTP a un servicio REST:

POST /user/welcome HTTP/1.1
Host: rest-service.server
Accept: /
Content-Type: application/json
X-AUTH-TOKEN: some-auth-token-here
Content-Length: 15
{"name":"John"}

Si bien el enfoque CURL funciona bien, puede volverse engorroso y propenso a errores rápidamente.
Esto implica los desafíos de tener que lidiar con varios tipos de respuestas de error, certificados SSL, etc. Una solución más elegante sería usar la biblioteca de cliente HTTP, como Guzzle.

Guzzle es un cliente HTTP con licencia MIT escrito en PHP. Puede fácilmente ser instalado a través de composer, ejecutando el comando composer require guzzlehttp/guzzle.

Lo más probable es que nuestros servicios REST sean contactados con mayor frecuencia por clientes que no sean PHP que por clientes PHP. Con eso en mente, veamos cómo un simple cliente HTML/jQuery puede comunicarse con nuestro servicio REST. Lo hacemos agregando el siguiente código a rest-service/client/index.html:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Client App</title> <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> </head> <body> <script> jQuery.ajax({ method: 'POST', url: 'http://rest-service.server/user/welcome', headers: {'X-AUTH-TOKEN': 'some-auth-token-here'}, data: JSON.stringify({name: 'John'}), dataType: 'json', contentType: 'application/json', success: function (response) { console.log(response.data); } }); </script> </body> </html>

El método jQuery ajax () actúa como un cliente HTTP. Al pasarle los valores de parámetro adecuados, pudo establecer con éxito la comunicación de solicitud-respuesta con el servicio REST.
A lo largo de esta sección, hemos tocado algunos de los puntos clave de los servicios REST.
Aunque apenas hemos arañado la superficie de la arquitectura REST general, los ejemplos presentados aquí deberían ser suficientes para comenzar. La facilidad de implementación y la simplicidad de JSON y HTTP hacen que REST sea una opción bastante atractiva para las aplicaciones modernas.

Comparte