06 Abr
API REST de WordPress foto

La API REST de WordPress

Héctor Garnacho García
Web Developer / teacher @ Vital Innova

En sus primeras versiones, el principal objetivo de WordPress fue proporcionar una herramienta liviana y sencilla que permitiera implementar blogs. Conforme avanzó en su desarrollo, se convirtió en el CMS (Content Management System o Sistema Gestor de Contenidos) más popular, pasando a ser una plataforma que permite realizar un completo desarrollo web tanto de propósito general como de blogs.

Esta versatilidad (aparte de otras muchas virtudes, y a pesar de algún que otro inconveniente) ha provocado que en la actualidad, una de cada cuatro webs (26%) hayan sido desarrolladas utilizando WordPress como CMS.

Hoy en día, y con la inclusión de la API REST en el core, podemos considerar WordPress no solo un CMS, sino un Framework sobre el cual podemos desarrollar o integrar otras aplicaciones.

Esta API puede cambiar el planteamiento de WordPress en un futuro inmediato. Facilita la creación de plugins, posibilita una separación radical entre Backend y Frontend, facilita la integración con apps móviles, y abre las puertas a otros lenguajes que no sean PHP en lo que se refiere al desarrollo sobre WordPress.

La API REST de WordPress no es algo nuevo (la versión 0.1 se publicó en 2013), aunque hasta octubre de 2015 (versión 2.0), no se ha comenzado a popularizar su uso. La inclusión en el core ha llegado con la versión 4.7, publicada en enero de 2017.

Comunicación entre aplicaciones

En ocasiones puede ser de mucha utilidad (de hecho, lo es), integrar o intercambiar datos entre diferentes sistemas. ¿Para qué vamos a desarrollar una determinada funcionalidad, si una aplicación ya la tiene implementada?. En este caso, lo único que necesitaremos es que esa funcionalidad esté disponible (y accesible, normalmente como un servicio web), y conozcamos el mecanismo y los datos a enviar para que se ejecute y nos devuelva el resultado.

Una de las dificultades a las que nos debemos enfrentar cuando queremos hacer esto suele ser que los sistemas o aplicaciones estarán escritos en diferentes lenguajes, funcionarán sobre diferentes plataformas o emplearán diferentes formatos de datos. Por ello, es tan importante que nuestro ecosistema de aplicaciones interconectadas empleen protocolos o formatos de datos estándar comunes, y aquí es donde cobran especial importancia conceptos como HTTP o JSON entre otros.

Es posible que todavía no se vean las ventajas que tiene esto, pongamos algunos ejemplos:

  • Disponemos de una web corporativa desarrollada con WordPress y necesitamos que los datos sobre usuarios, potenciales clientes o solicitudes de información o presupuestos se integren con un CRM o alguna herramienta de gestión de oportunidades de negocio, como por ejemplo PipeDrive.
  • Trabajamos con otro CMS y queremos que cuando se añada un post, automáticamente éste también se publique en nuestro WordPress.
  • Queremos que cuando un usuario se registre en otra plataforma, automáticamente se añada como usuario en WordPress con un determinado perfil.
  • Necesitamos alimentar de contenidos provenientes de nuestro WordPress a una aplicación móvil.
  • Deseamos integrar nuestra tienda online WordPress con un ERP, usando la API REST de WordPress, o la de WooCommerce.

Pero incluso, podemos ir más allá, y emplear WordPress simplemente como un contenedor de información, y desarrollar nuestro propio back office, que gestione los diferentes elementos que WordPress pone a nuestra disposición (posts, páginas, taxonomías, etc) u otros creados por nosotros (CPTs o Custom Post Types). Esta última idea permite separar definitivamente el Backend del Frontend WordPress.

Algunos conceptos previos

Antes de ver cómo usar la API REST de WordPress, es convenientemente tratar, aunque sea de forma breve, dos conceptos muy importantes: Las APIs REST y JSON. Si ya conoces estos dos conceptos, puedes continuar leyendo más abajo ;).

API

Habitualmente, encontraremos la palabra “Interfaz” asociada al concepto “API” (Application Programming Interface). Intentemos, primero, explicar el concepto de interfaz.

Imaginemos un coche, e imaginemos también que no somos mecánicos. El coche (software) nos ofrece una funcionalidad (servicio) muy interesante, que es moverse. Nosotros, como usuarios del coche, si deseamos que se mueva, sabemos que debemos utilizar un elemento que supone la frontera entre nosotros y el coche, y este elemento será el acelerador (Interfaz). Para conseguir que el coche se mueva, no es necesario conocer los complejos entresijos físicos que se producen para que el coche inicie el movimiento, basta con conocer el interfaz, y cómo tenemos que actuar sobre él para obtener una respuesta.

Una API consigue que los desarrolladores interactúen con los datos de la aplicación a través de una serie de servicios, de un modo planificado y ordenado, siguiendo unas reglas, y sin necesidad de conocer exactamente cómo están programados esos servicios. Por ejemplo, la API de WordPress nos permite obtener un post publicado en el blog, siempre que seamos capaces de llamar al servicio que nos proporciona esta información, proporcionándole los datos requeridos para que pueda hacer su trabajo.

REST (Representational State Transfer)

El concepto REST engloba una serie de especificaciones que inicialmente definieron la arquitectura de software para sistemas distribuidos, los cuales debían de alguna manera intercambiar información.

En la actualidad, y de forma general, se usa para describir cualquier interfaz entre sistemas que utilice directamente el protocolo HTTP para obtener datos o indicar la ejecución de operaciones sobre los datos, en cualquier formato (en el caso de la API REST de WordPress, será JSON).

Al estar basada en HTTP, todas las operaciones sobre la información se realizará a través de operaciones POST, GET, PUT y DELETE, que permiten enviar, obtener, reemplazar y eliminar. En su respectivo orden.

El hecho de emplear HTTP, establece un protocolo común (no específico de ninguna tecnología o lenguaje de programación), lo que permite que el acceso a la API se pueda realizar desde cualquier medio que soporte el intercambio de datos mediante HTTP.

Cada elemento será accesible mediante una URL. Por ejemplo:

Para consultar  todos los posts de nuestro WordPress, podemos acceder, desde el propio navegador, a la siguiente URI:

http://localhost/wordpress-demo/wp-json/wp/v2/posts/

Para acceder únicamente al post cuyo ID es el 1, haríamos lo siguiente:

http://localhost/wordpress-demo/wp-json/wp/v2/posts/1

Normalmente no accederemos a la API desde un navegador de internet, sino desde código (en estos dos ejemplos simplemente hemos consultado datos, que además no requieren autenticación), por lo que deberemos emplear los mecanismos que el lenguaje que estemos utilizando nos ofrezca. En el caso de PHP, podremos emplear la función CURL.

Esta metodología, nos permite llamar directamente a un servicio escribiendo la URL en la barra de direcciones. Si la llamada es correcta, el servicio nos responderá con la información resultado de la operación, en un formato específico. En el caso de la API REST de WordPress, será JSON.

JSON

JSON es la abreviatura de JavaScript Object Notation, un formato que permite el intercambio de datos, principalmente utilizado en aplicaciones y servicios web. Es uno de los estándares de intercambio de información más extendidos en la actualidad, y es el formato empleado en la API REST de WordPress, permitiendo el intercambio de los datos que tenemos en WordPress con prácticamente cualquier tecnología o plataforma.

¿Qué me permite hacer la API REST de WordPress?

Básicamente, podremos realizar cualquiera de las acciones CRUD (Create, Read, Update, Delete; o Crear, Consultar, Modificar, Borrar). Para cada una de ellas,:

  • POST (Create)
  • GET (Read)
  • PUT (Update)
  • DELETE (Delete)

Por ejemplo, para indicar en PHP que deseamos asociar la operación PUT a nuestra comunicación HTTP, añadiríamos esta línea de código:

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");

Las operaciones CRUD pueden afectar a cualquiera de los elementos de información de nuestro sitio WordPress:

  • Entradas
  • Páginas
  • Usuarios
  • Multimedia
  • Taxonomías
  • Custom Post Types (CPT o Tipos de Posts personalizados)

¿Qué tengo que hacer para poder usar la API REST de WordPress?

¿Utilizas una versión de WordPress 4.7 o posterior? Entonces no es necesario que hagas nada para poder disfrutar de la API REST, ya que a partir de esta versión, se ha añadido como opción “de serie” en el core.

Si, por el contrario, usas una versión anterior (recordemos la importancia de mantener WordPress actualizado), será necesario instalar el plugin WP REST API.

API REST de WordPress

En WordPress 4.7 o posterior, la API REST está activada por defecto. La principal razón para que esto sea así es que se pretende que esta forma de actuar con WordPress sea el nuevo estándar de facto. Este planteamiento no ha sido del agrado de todos los usuarios, y ha supuesto algunos problemas de seguridad cuando se implantó.

Si la API está activada, podremos interactuar con ella desde cualquier lenguaje que soporte operaciones mediante protocolo http, como por ejemplo Python o Ruby.

¿Y cómo desactivo la API REST si no deseo usarla?

Existen varias alternativas para desactivar la API REST, algunas de ellas mediante Plugins. Como siempre será preferible hacer las cosas sin emplear Plugins, sobre todo aquellas cosas que se puedan hacer de forma sencilla mediante código, proponemos el siguiente método:
  1. Editar el archivo functions.php de nuestro theme WordPress
  2. Añadir las siguientes líneas:
add_filter('json_enabled', '__return_false');
add_filter('json_jsonp_enabled', '__return_false');

Documentación de la API

Puedes encontrar toda la documentación relativa a la API REST de WordPress está disponible en las siguientes URL:

http://v2.wp-api.org/

https://developer.wordpress.org/rest-api/

Probando la API

Ya va siendo hora de hacer una pequeña prueba. Supongamos que tenemos un WordPress. En mi caso, lo acabo de montar en un servidor local MAMP, y tiene este aspecto:
Probando la API REST en WordPress demo foto

La URL de mi sitio WordPress es la siguiente:

http://localhost/wordpress-demo/

Además, supondremos que tenemos activados los permalinks para nuestros sitio web. Como la versión que yo he instalado es la 4.7.3, supondré que la API viene integrada en el core, y que utilizamos la versión 2.

Obteniendo información sobre la API

Para acceder a los servicios web disponibles a través de la API REST, deberemos invocar los diferentes Endpoints disponibles.

Cada Endpoint será accesible mediante una ruta o URL. Existe un Endpoint especial, llamado wp-json, al que se accede mediante la ruta raíz o inicial y que devuelve toda la información relativa a la API REST de nuestro WordPress, además de otros datos de interés:

http://localhost/wordpress-demo/wp-json/wp/v2

Si utilizas una versión de la API anterior, probablemente debas acceder a la siguiente ruta:

http://localhost/wordpress-demo/wp-json/

Al llamar a esta ruta, obtendremos un objeto JSON muy extenso, con la información de todos los Endpoints disponibles. En este ejemplo mostraremos solo las primeras líneas, en las que justamente se muestra información sobre el Endpoint raíz:

{
  "namespace": "wp/v2",
  "routes": {
    "/wp/v2": {
      "namespace": "wp/v2",
      "methods": [
        "GET"
      ],
      "endpoints": [
        {
          "methods": [
            "GET"
          ],
          "args": {
            "namespace": {
              "required": false,
              "default": "wp/v2"
            },
            "context": {
              "required": false,
              "default": "view"
            }
          }
        }
      ],
      "_links": {
        "self": "http://localhost/wordpress-demo/wp-json/wp/v2"
      }
    },
    "\wp/v2/posts": {
      "namespace": "wp/v2",
      "methods": [
        "GET",
        "POST"
      ],
      "endpoints": [
        {
          ...
          ...

Obteniendo páginas de nuestro sitio

La siguiente llamada obtiene la página cuyo ID es el dos.

http://localhost/wordpress-demo/wp-json/wp/v2/pages/2

El resultado será el siguiente:

{  
   "id":2,
   "date":"2017-04-05T14:50:18",
   "date_gmt":"2017-04-05T14:50:18",
   "guid":{  
      "rendered":"http://localhost/wordpress-demo/?page_id=2"
   },
   "modified":"2017-04-05T14:50:18",
   "modified_gmt":"2017-04-05T14:50:18",
   "slug":"pagina-ejemplo",
   "status":"publish",
   "type":"page",
   "link":"http://localhost/wordpress-demo/pagina-ejemplo/",
   "title":{  
      "rendered":"Página de ejemplo"
   },
   "content":{  
      "rendered":"
                    Esto es una página de ejemplo. Es diferente a una entrada porque permanece fija en un lugar y se mostrar
                    ... 
                    ... 
                    ...

Rutas base de los principales elementos de información

La siguiente tabla representa las URLs de cada uno de los elementos WordPress que podemos manipular con la API REST por defecto.

Elemento Ruta base
Posts /wp/v2/posts
Post Revisions /wp/v2/revisions
Categories /wp/v2/categories
Tags /wp/v2/tags
Pages /wp/v2/pages
Comments /wp/v2/comments
Taxonomies /wp/v2/taxonomies
Media /wp/v2/media
Users /wp/v2/users
Post Types /wp/v2/types
Post Statuses /wp/v2/statuses
Settings /wp/v2/settings

Autenticación

Evidentemente, muchos de los Endpoints requerirán autenticación para poder acceder a ellos. Por ejemplo, la creación de usuarios, o la publicación de posts.

Aunque puedes obtener aquí información completa acerca de cómo autenticarnos en esta API, a continuación enumeraremos brevemente las distintas opciones, así como los escenarios en los que son adecuados cada una de ellas.

  • Autenticación por cookies: Recomendable para acceder desde plugins instalados y desde el código de nuestro Theme WordPress
  • Autenticación básica por HTTP: Recomendable para realizar pruebas, no utilizar en producción.
  • Protocolo OAuth 1: Este mecanismo de autenticación es apropiado para peticiones desde el exterior, como por ejemplo otras aplicaciones que se sirvan de la API de nuestro WordPress, apps móviles o software de escritorio.

Si tienes alguna duda sobre cómo aplicar estos conocimientos en tu web o quieres que nosotros te ayudemos no dudes en contactar con nosotros.

Solicitamos tu permiso para obtener datos estadísticos de la navegación en esta web, en cumplimiento del Real Decreto-ley 13/2012. Si continúas navegando consideramos que aceptas el uso de cookies.

AceptarMás información