Como preparación, he pensado en echar un vistazo a cómo funciona el HTTP en general y cómo puedes utilizar las funciones nativas de WordPress para trabajar con él, abriendo tus productos a la integración con Twitter, Facebook, Mailchimp y todo tipo de herramientas.

En este artículo – de 2 partes – te mostraré los fundamentos de las peticiones HTTP, cómo están estructuradas, la información que contienen y cómo darle sentido. En la parte 2 pondremos en práctica nuestros conocimientos – a través de WordPress.

Qué es el HTTP

HTTP es el principal protocolo utilizado en la web hoy en día, significa Protocolo de Transferencia de Hipertexto y es responsable de mostrarte HTML, imágenes y mucho más. Los clientes HTTP – como tu navegador – envían peticiones a los servidores HTTP que devuelven una respuesta.

Por ejemplo, si diriges tu navegador a Kinsta.com, estás enviando una solicitud a los servidores de Kinsta. El servidor lee tu solicitud, averigua lo que necesitas (pronto hablaremos de cómo ocurre esto) y envía una respuesta que contiene el código HTML de la página. Tu navegador lee la respuesta y muestra el código HTML en la pantalla.

Fundamentos de las peticiones HTTP

Cualquier transacción entre un cliente y un servidor comienza con una petición HTTP. Las dos partes más importantes de una petición son el nombre del método y la URL del recurso solicitado. Empecemos por esta última.

Recursos

Un recurso es una pieza de datos que puede ser identificada con una URL. Por ejemplo: http://myblog.com/my-awesome-article probablemente devolverá un archivo HTML – el código necesario para renderizar tu impresionante artículo.

Nombres de los métodos

Los nombres de los métodos identifican el tipo de acción que se quiere realizar sobre el recurso. El navegador casi siempre utiliza GET, que indica que se quiere recuperar el recurso.

Otros métodos son POST para crear nuevos elementos, PUT para actualizar elementos, DELETE para eliminar elementos y HEAD para obtener información de cabecera.

Estos nombres de métodos, junto con las direcciones URL, constituyen la base de las API de REST. Puedes enviar una solicitud get a /article/4 para recuperar el artículo 4. También podría enviar una solicitud PUT junto con algunos datos para modificarlo, o una solicitud DELETE para eliminarlo.

La estructura de HTTP

Las peticiones y respuestas HTTP son muy similares desde el punto de vista estructural. Cada una tiene cuatro partes distintas:

  • Una línea inicial que es diferente para la solicitud y la respuesta
  • Cabeceras opcionales que contienen información sobre la solicitud o la respuesta
  • Una línea en blanco
  • Contenido opcional del cuerpo

1. La línea inicial

En el caso de las peticiones, la línea inicial contiene tres datos: el nombre del método, la ruta del recurso y la versión HTTP utilizada. Así es como podría verse:

GET /users/4 HTTP/1.1

Ten en cuenta que esta línea contiene la ruta relativa local, no la URL completa. La URL base se envía en una cabecera (la cabecera Host), pronto veremos las cabeceras.

Las respuestas también contienen tres datos: la versión HTTP, el código de estado y una razón que describe el código de estado.

HTTP/1.1 302 Moved Temporarily

Para obtener una lista de todos los códigos de estado y un poco sobre cada uno, echa un vistazo a la Especificación de los Códigos de Estado HTTP, todo está bastante claro allí.

2. Cabeceras

Las cabeceras son esencialmente pares de información nombre-valor. La cabecera Host mencionada anteriormente es un buen ejemplo, de hecho, es la única cabecera requerida en HTTP 1.1. Las cabeceras te dan más control y más información.

La cabecera Accept te permite especificar el tipo de contenido que permitirá en una solicitud. La cabecera Accept-Language te permite controlar el idioma del contenido que estás dispuesto a aceptar. Ambas son formas de negociación de contenidos.

La cabecera de Authorization es uno que utilizarás mucho cuando trabajes con las APIs para acceder a acciones sólo con autorización, como borrar un Tweet o acceder a tu cuenta de usuario.

3. Cuerpo

El cuerpo es donde se devuelve el recurso, o donde se pueden dar más explicaciones si se ha producido un error. Puedes utilizar el lenguaje que prefieras para leer los datos del cuerpo y mostrarlos, o utilizarlo internamente para tratar los errores.

Uso de HTTP

Descubrí que entender HTTP era enormemente útil a la hora de negociar la documentación de las API de terceros. Lo que complica el uso de HTTP es que normalmente se utiliza dentro de un lenguaje de programación, lo que significa que hay que estar familiarizado con la forma en que ese lenguaje implementa HTTP, así como con el propio HTTP.

Una vez hecha la petición, hay que leer la respuesta, saber qué información hay que obtener de ella y, tal vez, pasar la respuesta por algunas funciones para convertirla en el formato que se necesita. Una vez que tengas esa información, podrás mostrarla, guardarla en una base de datos o manipularla de alguna manera.

El HTTP en sí mismo no es difícil, pero las tareas que debes realizar aparte de hacer/recibir una solicitud pueden acumularse muy rápidamente, enmascarando la simplicidad del HTTP en un manto de complejidad. Además, muchas APIs requieren que te autentiques, lo que añade otra capa a todo esto.

cURL

cURL es una forma de interactuar con HTTP pero es bastante compleja. Puede ser usado desde la terminal, pero PHP también tiene soporte para cURL. Para obtener el contenido de una URL puedes usar lo siguiente en la terminal.

curl http://kinsta.com

El problema es que el uso de cURL en la terminal puede ser un poco complejo. Para ver sólo la información de la cabecera tendrías que utilizar el siguiente formulario:

curl -s -D - http://danielpataki.com -o /dev/null

Puedes ver una lista de todos los parámetros, pero lo más probable es que utilices cURL en tu aplicación web, así que vamos a ver cURL en PHP, así es como se obtiene el contenido de la misma página:

$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
echo $data;

Esto es todavía un poco torpe, pero utilizando la Guía de PHP se puede averiguar qué es qué.

Uso de WordPress

cURL es genial, pero añadir cabeceras y tratar con la información devuelta no es tan fácil como puedes estar acostumbrado si has estado trabajando con clases y funciones PHP bien codificadas. Por suerte, WordPress nos tiene cubiertos con su HTTP API. Lo veremos en detalle en el próximo artículo, por ahora, aquí hay un ejemplo con la función nativa de WordPress, incluyendo la adición de cabeceras:

$request = wp_remote_get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=kinsta, array(
    'headers' => array(
        'Authorization' => 'Bearer ' . $token,
    ),
));

Resumen

HTTP es la base de todo lo que hacemos en la web y conocer lo que ocurre en una petición y en una respuesta nos da una gran capacidad de resolución de problemas y nos permite controlar mejor nuestras aplicaciones.

Si te familiarizas con los fundamentos de HTTP podrás utilizar las APIs externas más rápidamente y mejor, sabiendo exactamente qué hacer con la información que te dan las guías de las APIs.

En el próximo post de la serie veré cómo puedes manejar datos HTTP con WordPress y cómo puedes conectar WordPress con un servicio de terceros muy fácilmente.

Daniel Pataki

Hi, my name is Daniel, I'm the CTO here at Kinsta. You may know me from Smashing Magazine, WPMU Dev, Tuts+ and other WordPress/Development magazines. Aside from WordPress and PHP I spend most of my time around Node, React, GraphQL and other technologies in the Javascript space.

When not working on making the best hosting solution in the Universe I collect board games, play table football in the office, travel or play guitar and sing in a pretty bad band.