Close
Image Alt

WordPress JSON REST API

Hace ya más de un año que empecé a seguir el desarrollo del REST API que se está desarrollando para WordPress y que probablemente se añada a su core este año. El año pasado lo intenté utilizar en un proyecto pero se quedaba aún corto en algunas áreas, pero está ya en un momento muy prometedor.

Actualmente se puede utilizar en forma de plugin. La versión beta la podréis encontrar en su Github master branch. Cuando esté terminado y forme parte del core de WordPress será sin duda uno de los mayores avances que se hayan introducido en el desarrollo de WordPress en mucho tiempo.

Pero vayamos por partes. Vamos a ver antes de nada qué es un REST API y para qué nos puede servir.

¿Qué es un REST API?

Resumiendo, un REST API es una aplicación que nos permite leer o manipular datos utilizando HTTP a través de sus típicas acciones POST, GET, PUT y DELETE.

¿Y qué es JSON?

Es simplemente un formato para estructurar datos, similar al quizás más conocido XML. Utilizando JSON los datos pueden ser leídos por muchos lenguajes de programación diferentes, lo que facilita la comunicación. El WordPress REST API nos devuelve los valores en JSON. Más adelante veremos ejemplos. Para poder traducir los datos de JSON a array u objetos o al revés tenemos en PHP json_encode() y json_decode().

Entonces, ¿qué es el WordPress REST API?

Es una aplicación que nos permite conectarnos con nuestra instalación de WordPress y leer, editar, borrar y grabar datos (posts, usuarios, comentarios, etc…)

Un ejemplo: imaginad que tenéis una web en wordpress y queréis lanzar una aplicación móvil. Necesitaréis que esa aplicación móvil esté en contacto con vuestra web, usando la misma base de datos para los posts, comentarios, registro de usuarios, etc… Otro ejemplo: Imaginad que queréis hacer una web no basada en WordPress pero sí queréis que el gestor de contenidos sea WordPress. Necesitaréis entonces que la nueva web lea, edite o grabe comunicándose con el gestor de contenidos de WordPress. Un tercer ejemplo: Puede ser que tengamos dos webs independientes que, por lo que sea, necesitamos que compartan algún tipo de dato (usuarios, categorías, etc…).Y un cuarto ejemplo: Imaginad que queréis hacer un administrador completamente personalizado, diferente del actual, usando una aplicación diferente del gestor de WordPress.

Todos ellos son ejemplos claros en los que podéis usar el WordPress REST API.

Utilizando el WordPress REST API

Lo primero que vamos a hacer es descargarnos el plugin e instalarlo en una instalación que tengáis de WordPress para hacer pruebas. Si queréis investigar un poco más podéis bajaros en su lugar la versión beta, aunque en producción no es recomendable utilizarla.

Una vez instalado el plugin ya podemos activarlo. Os recomiendo que leáis con calma su documentación.

Para nuestros ejemplos vamos a suponer que nuestra instalación de WordPress está en el dominio wpruebas.dev. Ajustad los enlaces permanentes en wordpress para que salgan las URLs con el nombre del post, o de la forma que estéis habituados a hacerlo.

Si simplemente escribimos en nuestro navegador:

obtendremos (en mi caso) lo siguiente:

Ahí veis una serie de datos en formato JSON. Os da el nombre de la web, su descripción, su url, y lo que es realmente importante, las rutas (routes), que son el prototipo de URLs a través de las cuales podemos acceder a información. Verás que todas ellas tienen un apartado del tipo < nombre >. Esto serán variables. Veréis también cómo indica si la ruta soporta POST, GET, etc…

Os preguntaréis cómo hacer llegar esta URL hasta nuestra instalación de WordPress, porque claro, yo estoy escribiendo la URL en el navegador, pero una hipotética aplicación de móvil no podrá hacer eso. Lo podéis hacer por ejemplo usando CURL. Vamos a ver ahora las diferentes “rutas” o urls que podemos utilizar para acceder, editar o grabar datos.

Obteniendo entradas (posts)

Vamos a avanzar con la primera ruta. Supongamos que queremos obtener los posts que hay en nuestra instalación de WordPress. Para eso haríamos:

Como veis sería añadir a la URL “/wp-json/” y luego la parte que le indica al plugin lo que tiene que hacer. Y en este caso lo que tiene que hacer es devolver todos los posts en formato JSON:

Aquí sólo hay un sólo post, pero saldrían todos. La paginación, de existir, viene dada en el HTTP headers. Por ejemplo:

El X-WP-Total da el número total de posts disponibles, mientras que el X-WP-TotalPages header da el número de páginas. El Link da los enlaces para obtener las páginas anterior y posterior.

Si lo que queremos es obtener un post concreto, lo que haríamos sería indicar el ID del post al final de la URL (en este caso el post con ID = 1):

Para obtener más datos podemos utilizar los filtros. Lo filtros son parámetros que controlan lo que queremos obtener de los posts. Podéis ver una lista completa aquí. Un ejemplo, para obtener los dos últimos posts:

Los filtros se pueden además concatenar:

Por otro lado, si queremos seleccionar posts de un tipo determinado de post, usaríamos el parámetro Type:

Por defecto es post, y se pueden poner como cadena de texto o como array (como en el ejemplo).

O si queremos mostrar los datos de una búsqueda (por ejemplo, todos los posts en los que salga la palabra “WordPress”):

Como veis el método para obtener datos es similar en terminología al usado en WP_Query en un loop normal de WordPress.

Si lo que queremos es editar o crear un post lo tenemos que hacer mediante autenticación. Esta se puede hacer de dos maneras: mediante cookies si estamos en la misma web o mediante OAuth si estamos conectando desde fuera (en este último caso hay que instalar de momento el plugin OAuth1, que se integrará en el API cuando pase a estar en el core de WordPress).

A diferencia de la obtención de datos (usando GET) para grabar datos lo haríamos mediante POST mandando los datos en formato JSON, la edición mediante PUT y el borrado mediante DELETE.

Obteniendo la información meta de un post

Si queremos obtener los datos meta de un post haríamos:

donde es el ID del post y es el ID del meta que queremos obtener. Para obtener los meta de un post se requiere Autenticación.

Categorías y etiquetas

Para obtener los posts de una categoría o de una etiqueta podemos utilizar también los filtros. Si queremos obtener todos los posts de una categoría (por ejemplo, de la categoría con ID = 5) tendríamos que poner:

Y si queremos obtener todos los posts de la etiqueta con ID = 1:

Si queremos obtener todos los datos sobre la categoría o etiqueta o taxonomía personalizada:

Para obtener las diferentes categorías existentes:

Y una en concreto:

Trabajando con imágenes

También podemos obtener una imagen a partir de su ID (en el ejemplo con el ID 46):

Y lo que he obtenido es:

Usuarios

Como os podéis imaginar gran parte del apartado de usuarios está también sujeto a autenticación.

De todas formas, si queremos obtener todos los posts de un autor en concreto, partiendo de su ID (en el ejemplo con ID = 2):

Comentarios

Podemos obtener los comentarios de un post (en el ejemplo los comentarios del post con ID 6904):

Y si queremos obtener un comentario en concreto a partir del ID del comentario (por ejemplo el comentario con ID 1620 perteneciente al post con ID 6904):

Bueno, yo creo que con lo dicho podéis tener una buena idea de las posibilidades que nos ofrece el WP API REST. Eso sí, probadlo todo muy bien ya que está todo aún en desarrollo. Una vez terminado los desarrolladores que quieran comunicarse con una web desarrollada en WordPress no necesitarán saber cómo funciona WordPress para obtener, editar o grabar datos en la misma.

Lecturas recomendadas:
Nueve días después de escribir este artículo se ha actualizado el WP REST API a la
versión 1.2.
Introduction to the JSON REST , por Josh Pollock.

Comments

  • Excelente post.

    1 April, 2015
    reply
  • Exelente post. Me ha despejado la duda de como funcionara la API de WordPress.

    13 May, 2015
    reply
  • luis

    hola. gracias por este aporte, quisiera saber como puedo obtener todos los post de una categoria personalizada

    mi taxtonomia se llama job_category y el id de una categoria en espesifico es la 50 y quiero obtener todos los post que tengan esta categoria

    20 May, 2015
    reply
  • Santi

    Hola,

    Una cuestión /wp-json/posts … solo en devuelve los últimos post es decir solo los que están en la primera página.

    como obtengo todos?

    16 July, 2015
    reply
  • La verdad es que desconocía este plugin por completo, revisare las fuentes señaladas, agradesco la informacion. WordPress no deja de sorprenderme. Saludos

    26 July, 2015
    reply
  • cuanto saben del lenguaje, gracias por el post.

    26 October, 2015
    reply
  • javier

    Una pregunta, porque el json no se actualiza al agregar otro post

    24 December, 2015
    reply
  • Gracias por la explicación, era justo lo que estaba buscando.

    28 February, 2016
    reply
  • luis

    Excelente post, pero tengo una pregunta que estoy seguro que le ha sucedido a muchos, por que mi Json me aparece desordenado? Miren:

    http://www.notilogia.com/wp-json/

    o

    http://www.notilogia.com/wp-json/wp/v2/posts

    Quiero saber cuales son mis Json pero no se, todo me aparece desordenado y no como indica aca. Necesito ayuda URGENTE.

    17 July, 2016
    reply
  • luis

    ¡No se como agradecertelo! ¡Me has sacado de un apuro! Te debo mi carrera 😀

    17 July, 2016
    reply

Post a Comment