Consumir una API REST externa de WordPress

Existen muchas API REST gratuitas y de pago que brindan acceso a datos y servicios. Puede conectarse a estos para crear sus propias aplicaciones basadas en la web. Aprenda a agregar código a su sitio web de WordPress para consumir datos de una API REST externa y luego mostrarlos en su sitio.

Para este tutorial, vamos a extraer algunos datos del sitio web Flipsum Ipsum, que es un generador gratuito de Ipsum. Básicamente, es un generador gratuito de galimatías.  

Para seguir este tutorial, deberá usar un tema secundario personalizado(child theme) para poder editar su functions.php y este no afecte a su funcionamiento actual de su sitio.

Cómo funciona

Vamos a crear un código abreviado que extraiga algo de galimatías del sitio de Flipsum Ipsum y luego lo represente en la salida HTML de regreso al navegador. El shortcode se llamará

[ flipsum_ipsum ] y tomará los siguientes parámetros:

  • ipsum (cadena): El nombre del generador de ipsum a usar, porque Flipsum Ipsum nos permite elegir qué tipo de galimatías queremos.
  • párrafos (int): ¿Cuántos párrafos de galimatías queremos?

El acceso a las API REST utiliza exactamente el mismo proceso que el acceso a las páginas web. Todo lo que tenemos que hacer es crear una URL, solicitar esa URL del servidor correspondiente y luego procesar el resultado. El resultado de la API estará en formato JSON, que PHP puede convertir en una matriz para nosotros. La API de Flipsum Ipsum es fácil de utilizar. Aquí hay una URL de ejemplo que devuelve 5 párrafos de Fairy Tale Ipsum.

https://flipsum-ipsum.net/api/icw/v1/generate?ipsum=fairy-tale&paragraphs=5

Escribamos algo de código

En la carpeta de su tema secundario personalizado, genere un archivo llamado shortcode-ipsum.php y pegue lo siguiente en él.

?php
// Si este archivo se llama directamente, cancelar.
defined('WPINC') || die();
const FIS_DEFAULT_IPSUM_PARAGRAPHS = 5;
function do_shortcode_flipsum_ipsum($atts) {
   $html = '';
   if (is_admin()) {
      // ...
   } elseif (wp_doing_ajax()) {
      // ...
   } else {
      // Analiza las opciones del shortcode.
      $args = shortcode_atts(
         array(
            'ipsum' => '',
            'paragraphs' => FIS_DEFAULT_IPSUM_PARAGRAPHS,
            'debug' => false,
         ),
         $atts
      );
      $url = sprintf(
         'https://flipsum-ipsum.net/api/icw/v1/generate?paragraphs=%d',
         $args['paragraphs']
      );
      // Si hemos especificado un generador de ipsum, agréguelo a la URL.
      if (!empty($args['ipsum'])) {
         $url .= sprintf('&ipsum=%s', $args['ipsum']);
      }
      // Cree un Curl Handle.
      $ch = curl_init();
      // Opciones estándar de PHP/Curl para una simple solicitud GET.
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      // Ejecuta la solicitud.
      $json_response = curl_exec($ch);
      $response_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
      // Cierre del Curl Handle.
      curl_close($ch);
      if ($response_code != 200) {
         $html .= sprintf('<p><strong>ERROR:</strong> Got HTTP response %d from the server.</p>', $response_code);
      } elseif (empty($json_response)) {
         // No hay datos devueltos desde el servidor.
         $html .= sprintf('<p><strong>ERROR:</strong> Empty respone from the server.</p>');
      } elseif (boolval($args['debug'])) {
         // Representar la respuesta JSON sin procesar.
         $html .= '<pre>';
         $html .= sprintf("HTTP_RESPONSE=%d\n", $response_code);
         $html .= sprintf("%s", $json_response);
         $html .= '</pre>';
      } elseif (empty($ipsum_paragraphs = json_decode($json_response, true))) {
         $html .= sprintf(
            '<p><strong>ERROR:</strong> Failed to process the JSON response.</p><pre>%s</pre>',
            esc_html($json_response)
         );
      } else {
         // Bucle a través de los párrafos
         foreach ($ipsum_paragraphs as $ipsum_paragraph) {
            $html .= sprintf('<p>%s</p>', esc_html($ipsum_paragraph));
         }
      }
   }
   return $html;
}
add_shortcode('flipsum_ipsum', 'do_shortcode_flipsum_ipsum');

La lógica es bastante sencilla. La secuencia principal se descompone así:

  1. Cree una URL para acceder a la API de Flipsum Ipsum. Si no especificamos qué generador de ipsum usar, el sitio elegirá uno al azar para nosotros.
  2. Crear un controlador de rizo ($ch)…
    1. Establezca algunas opciones estándar.
    2. Ejecutar la solicitud.
    3. Almacene el cuerpo del resultado (con suerte, una gran cadena llena de datos JSON).
    4. Guarde el código de respuesta HTTP (con suerte, 200 = OK).
    5. Cierre el control de rizo.
  3. Si la API no devuelve nada (una cadena vacía), establezca el HTML devuelto en una cadena de error.
  4. si hemos pasadodepuración = verdaderoen nuestros parámetros de shortcode, luego establezca el HTML devuelto en el texto sin formato devuelto por la API. Útil para depurar/probar.
  5. Si PHP no puede convertir la respuesta de la API en una matriz usando json_decode (), devuelva una cadena de error Y la respuesta sin formato, para que podamos averiguar cuál es el problema.
  6. Recorra los párrafos devueltos y devuelva el HTML a la interfaz, con cada párrafo envuelto en <p></p>.

A continuación, abra el archivo functions.php de su tema hijo y péguelo en él.

// WP Tutorials : Flipsum Ipsum Shortcode
require_once dirname(__FILE__) . '/shortcode-ipsum.php';

En el editor de bloques, cree un bloque de shortcode, ingrese [flipsum_ipsum], guarde su contenido y visualícelo.

Ejemplos de códigos cortos

Código cortoDescripción
[flipsum_ipsum]Deje que la API elija un generador de ipsum aleatorio para nosotros y devuelva el número predeterminado de párrafos.
[flipsum_ipsum ipsum=’café’ depuración=verdadero]Tome un poco de galimatías de café con el número predeterminado de párrafos y muestre la respuesta API sin procesar.
[flipsum_ipsum ipsum=párrafos de ‘receta’=10]Generó 10 párrafos de sabrosos galimatías y los renderizó normalmente, en elementos HTML de párrafo.

Extendiendo el código corto

Este shortcode aquí es bastante básico, pero funciona lo suficientemente bien. Hay muchas maneras de extenderlo.

Almacenar en caché la respuesta de la API en un transitorio

Para acelerar las cosas para sus visitantes, es posible que desee almacenar en caché las respuestas de la API, de modo que no tenga que consultar la API para cada solicitud que llegue a su sitio. Puede almacenar el galimatías en un transitorio de WordPress : un almacén de datos de corta duración que desaparece después de un tiempo de espera (por ejemplo, 1 hora o 1 día).

Podría funcionar algo como esto:

  • El usuario quiere algún galimatías.
  • ¿Ya tenemos algún galimatías en nuestro transitorio?
    • Si es así, entonces…
      • Toma el galimatías del transitorio.
    • Más…
      • Obtenga algo de galimatías de la API de Flipsum Ipsum.
      • Guarde el nuevo galimatías en nuestro transitorio con un tiempo de espera de 1 hora (o lo que quiera).
  • Renderiza el galimatías.

La próxima vez que un usuario quiera algún galimatías, puede usar lo que está en el transitorio, que será mucho más rápido que llamar a la API remota cada vez.

Leave a reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You may also like