Desde la versión 4.7 ya tenemos integrada en WordPress la REST API de la que tanto se ha hablado pero no todo el mundo va a usar la REST API ya que es algo más para los desarrolladores y a día de hoy es algo que hacia falta y nos va a facilitar mucho la comunicación entre dispositivos y en el intercambio de datos.
Esta es una serie de Artículos sobre la Rest API de WordPress y como trabajar con ella.
- Introducción y Trabajando con la REST API
- Rest API – Devolver metaboxes
Introducción y que es una REST API
Una REST API no es mas que una API basada en REST y el formato de los datos se realiza en JSON, estos tres conceptos parecen chinos y redundantes pero vamos a explicarlo con un ejemplo.
Cuando habéis entrado en esta página se ha producido una petición al servidor y este ha devuelto un código en html que nuestro navegador es capaz de interpretar. Si entráis aquí veréis una web con su contenido https://demo.wp-api.org/ pero si tuviéramos una aplicación móvil no queríamos cargar todo el contenido sino solo la información, por ejemplo artículos, menús ,… esta información para una aplicación móvil sería mucho mejor que estuviera en un formato más sencillo y que se pudiera procesar y aquí es donde usamos JSON un formato en modo texto que podéis ver a continuación.
Vamos a ver como un ejemplo de url de la rest api de WordPress y explicar como se forma la url:
http://demo.wp-api.org/wp-json/wp/v2/posts
- http://demo.wp-api.org : Ejemplo de url tambien puede ser si trabajais en local http://localhost, .. o vuestro dominio
- /wp-json: prefijo de la url de la WP REST API
- /wp: nombre de la url
- /v2: version de la WP REST API
- /posts: recurso que pedimos
Si poneis en el navegador la siguiente url: http://demo.wp-api.org/wp-json/wp/v2/posts
Veréis que os sale un chorro de texto, pero si usáis Chrome y tenéis alguna extensión como Json viewer o Json formatter podéis verlo como la siguiente captura.
Y si quereis tener esa información en vuestra consola ( si teneis instalada las curl)
curl -X OPTIONS -i http://demo.wp-api.org/wp-json/wp/v2/posts
Accederás igual a listado de artículos.
Pues este trozo de texto es el idoneo para utilizar en otro dispositivo, en una web.
Esto tiene multiples aplicaciones como por ejemplo imaginar que quiero mostrar todos mis tweets en mi web o quiero entrar en meetup obtener la lista de miembros de una comunidad de WordPress y ponerla en una web.
Lo normal es que para utilizar contenidos de otros tengais que tener una autentificacion, sino cualquiera podria usar la informacion de otros.
Os recomiendo si teneis WordPress y no usais REST API instaleis un plugin para bloquearla.
Podeis hacerlo de forma manual añadiendo a vuestro tema o plugin las siguientes lineas:
add_filter(‘json_enabled’, ‘__return_false’);
add_filter(‘json_jsonp_enabled’, ‘__return_false’);
O mediante un plugin:
https://es.wordpress.org/plugins/disable-json-api/
En mi caso la tengo abierta de momento 😛
Trabajando con la REST API:
No vamos a entrar en definición de REST pero si que vamos a entender los principios. A diferencia de proyectos orientados a servicios, en rest lo que tenemos son Recursos.
Los recursos son sencillos y se utiliza JSON o XML para representar objetos y atributos.
La forma de comunicarse por HTTP es mediante unos métodos sencillos GET, POST, PUT y DELETE, no hay mas o al menos es la filosia principal.
Vamos a ver los métodos para un CRUD (crear, recuperar, actualizar, eliminar) , solicitudes HTTP y para ello vamos a utlizar los post de WordPress
Listar los post o artículos
Las urls o rutas se forman de la siguiente manera:
MI DOMINIO + wp-json + url de la rest wp/v2/posts
Ejemplo http://demo.wp-api.org/wp-json/wp/v2/posts
donde v2 indica la versión, a futuro sera v3, v4,.. es la forma de escalar
Ejemplo de listar artículos o post
GET /wp/v2/posts
http://demo.wp-api.org/wp-json/wp/v2/posts
ejemplo de código
Si queremos añadir filtros podemos hacerlo de la siguiente manera
http://demo.wp-api.org/wp-json/wp/v2/posts?filter[posts_per_page]=2
Si queremos añadir varios filtros se puede anidar
http://demo.wp-api.org/wp-json/wp/v2/posts?filter[posts_per_page]=2&filter[order]=ASC
Si tenemos nuestros propios custom post types
http://demo.wp-api.org/wp-json/wp/posts?type[]=post&type[]=page
Ejemplo de búsqueda
http://demo.wp-api.org/wp-json/wp/v2/posts?filter[s]=Wordpress
Vamos a ver como listar un único artículo ( el id se sustituye por un número)
GET /wp/v2/posts/<id>
http://demo.wp-api.org/wp-json/wp/v2/posts/<id>
ejemplo de codigo
Crear un post
Este cambia respecto a otros se utiliza POST en vez de GET ( muy importante)
Los argumentos son los campos que le pasamos como el titulo ,… y como vereis no añadimos el id porque vamos a crearlo 😛
POST /wp/v2/posts
Actualizar un post
POST /wp/v2/posts/<id>
curl -X POST http://demo.wp-api.org/wp-json -d ‘{“title”:”My New Title”}’
Borrar un post
DELETE /wp/v2/posts/<id>
curl -X DELETE http://demo.wp-api.org/wp-json/wp/v2/posts/<id>
Referencia de la REST API de WordPress
Os dejo algunas rutas y enlaces de la rest api oficial de WordPress, aqui teneis toda la referencia
https://developer.wordpress.com/docs/api/
Resource | Base Route |
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 |
Programas para Trabajar con una Rest API
- postman
- advanced rest client ( Chrome )
Tutoriales de Rest API