usar la REST API de WordPress

usar la REST API de WordPress

Este capítulo es el primero de tres, en el vamos a ver el modo de usar la API interna de WordPress.

Conceptos básicos

Bien como he comentado al principio este es el primer capítulo de tres, en el vamos a obtener información de nuestro contenido por medio de API interna de WordPress, cómo usar la REST API para disponer de nuestro contenido en un app de móvil por ejemplo.
En nuestro segundo capítulo veremos cómo obtener información externa por medio de una API de terceros.
Y en nuestro tercer capítulo veremos cómo crear una REST API desde php y MYSQL. para un contenido específico.

Estamos hablando de API, ¿pero qué es eso?

API: es una capa por medio de la cual tu tecnología o app puede interactuar con otras. Supón que acabas de desarrollar un algoritmo de detección de rostros, si quieres que alguien más lo use no le mandaras el código. Puedes crear una API y a través de ella ofrecer una conexión a tu servicio por medio del cual obtendrán lo que quieren.

REST:
 es cualquier interfaz entre sistemas que use HTTP para obtener datos o generar operaciones sobre esos datos en todos los formatos posibles, como XML y JSON. Simplemente es la arquitectura por medio de la cual nos basaremos para el envío de datos desde nuestra API.

Recursos: Son los bloques principales de la arquitectura REST, cuando hablamos de WordPress estos recursos son: entradas, páginas, comentarios, usuarios, etc

URIs (Uniform Resource Identifier): Es la dirección para identificar a un recurso.

HTTP Verbs: Una REST API permite realizar diversas operaciones como leer, crear, actualizar y borrar recursos, para esto usa los HTTP Verbs como sigue:

    • GET: Usado para leer o devolver un recurso.
    • POST: Usado para crear un nuevo recurso.
    • PUT: Usado para actualizar un recurso.
    • DELETE: Usado para borrar un recurso.
    • HEAD: Usado para verificar la existencia de un recurso.
    • OPTIONS: Usado para devolver información que soporta un recurso.

Aclarado esto vamos a comenzar:

Para trabajar con la API de WordPress tenemos que instalar el plugin WP REST API (V2). imagino que esta funcionalidad vendrá totalmente incluida en futuras versiones.

Haciendo consultas a la REST API

Una vez tenemos instalado el plugin podemos realizar diferentes consultas directamente en la barra de navegación, añadiendo /wp-json/wp/v2/ a nuestra url.
O usar un complemento de navegador como Postman REST easy, para hacer una petición Get de todos las entradas del sitio, como se muestra en imagen.

Esta petición nos devolverá el contenido de nuestras entradas en formato Json.

A continuación veremos algunas peticiones más comunes:

Listar todas las entradas usando GET

http://midominio.com/wp-json/wp/v2/posts/

Listar una entrada específica xxx usando GET

http://midominio.com/wp-json/wp/v2/posts/xxx

Listar las entradas de la categoría xxx usando GET

http://midominio.com/wp-json/wp/v2/posts?filter[cat]=xxx

Autenticación en la REST API

La autenticación nos permite realizar tareas de creación, actualización y eliminación de datos. WP REST API permite tres tipos de autenticación:

A continuación usaremos código PHP para conectarse a un sitio Web que tenga habilitado la REST API y realizaremos tareas de creación, actualización y eliminación de entradas.

Para desarrollar nuestro ejemplo usaremos la autenticación base, instalaremos el plugin Basic Auth. Tener en cuenta que este tipo de autenticación no debería ser usado en entornos de producción.

Crear una nueva entrada

El siguiente código PHP sirve para conectarse a nuestro sitio WordPress y crear una nueva entrada

<?php

$host = 'http://midominio.com/wp-json/wp/v2/posts/';

$data = array('title' => 'Titulo Post Nuevo', 'content' => 'Nueva entrada', 'status' => 'publish');
$data_string = json_encode($data);

$headers = array(
    'Content-Type:application/json',
    'Content-Length: ' . strlen($data_string),
    'Authorization: Basic '. base64_encode('admin:clave')
);

$ch = curl_init($host);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

$result = curl_exec($ch);
curl_close($ch);
echo($result);

Lo que hace este código:

  • Defino la url de mi sitio REST API en la variable $host
  • La variable $data_string tendrá los datos del nuevo post en formato json
  • Defino la variable $headers, tener en cuenta que aquí pasaremos los datos de autenticación.
  • Uso CURL
    • Paso las cabeceras
    • Puesto que es una creación usaré POST
    • Paso los datos
    • Defino para retornar un resultado

Actualizar esa entrada

Para realizar una modificación lo único que tenemos que cambiar en el código anterior es la url de la variable $host y los datos a modificar en la variable $data.

La url a usar será del tipo:

$host = ‘http://midominio.com/wp-json/wp/v2/posts/13’;

En donde 13 es el ID del post a modificar, el código completo se puede ver a continuación:

<?php

$host = 'http://midominio.com/wp-json/wp/v2/posts/13';

$data = array('title' => 'Titulo Post a Modificar', 'content' => 'Contenido  a Modificar', 'status' => 'publish');
$data_string = json_encode($data);

$headers = array(
    'Content-Type:application/json',
    'Content-Length: ' . strlen($data_string),
    'Authorization: Basic '. base64_encode('admin:clave')
);

$ch = curl_init($host);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

$result = curl_exec($ch);
curl_close($ch);
echo($result);

Borrando la entrada

Para realizar una eliminación la url de la variable $host es similar a una actualización, la diferencia es que en este caso no necesitamos pasar la variable $data.

<?php
$host = 'http:/midominio.com/wp-json/wp/v2/posts/13';

$headers = array(
    'Content-Type:application/json',
    'Authorization: Basic '. base64_encode('admin:clave')
);
$ch = curl_init($host);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result = curl_exec($ch);
curl_close($ch);
echo($result);

En el código anterior :

  • Vemos que la url tiene el valor 13 que es el ID del post a eliminar.
  • Usamos DELETE para indicar a la REST API que se trata de una eliminación.

En los tres últimos puntos hemos visto cómo realizar operaciones sobre las entradas de WordPress usando código PHP, sin embargo es posible usar cualquier otro lenguaje de programación para realizar estas operaciones, la REST API de WordPress se encargará de gestionar las operaciones enviadas.