Cómo utilizar la API de WordPress

[et_pb_section admin_label=»section»]
[et_pb_row admin_label=»row»]
[et_pb_column type=»4_4″]
[et_pb_text admin_label=»Text»]
WordPress es una herramienta muy versátil gracias a su ecosistema, utilizando este CMS podemos crear todo tipo de páginas web, blogs, tiendas y casi cualquier cosa que se nos ocurra. ¿Pero qué sucede si quieremos integrar el CMS con otro proyecto y no nos basta con los plugins existentes? ¿Y si lo que queremos es extender las funcionalidades que nos brinda? Históricamente se han desarrollado plugins o integrado aplicaciones accediendo a la base de datos de WordPress pero actualmente gozamos de una alternativa mucho mejor, más desacoplada y sencilla de utilizar que sin duda es una de las grandes mejoras en los últimos tiempos en el mundo WordPress, la inclusión de una API REST que nos ofrece endpoints para tratar con la información que alberga el sistema.

¿Qué es una API REST?

REST es el acrónimo de Representational State Transfer, se trata de un conjunto de principios de arquitectura para la comunicación de información. Por tanto una API REST (o RESTful) es cualquiera que cumpla los principios que se definen. Normalmente el término se suele utilizar de manera amplia para definir cualquier webservice que no mantenga estado (stateless), que utilice HTTP y sus verbos para la comunicación y que disponga de cierta estructura para las URIs que referencian de manera única a cada entidad.

Los principios que se deben cumplir para que una API sea considerada RESTful van todos enfocados a mejorar el rendimiento, escalabilidad, simplicidad y en general el sistema. A continuación los resumimos brevemente:

  • Arquitectura Cliente-Servidor: Este punto está enfocado a optimizar los recursos separando claramente las responsabilidades y optimizando cada parte para su finalidad.
  • Carencia de estado: La API debe ser stateless, para ello no debe existir ninguna información que se comparta entre peticiones a modo de contexto. No se establecerá un contexto en el servidor que perdure la primera vez que cliente y servidor se comuniquen sino que cada petición será independiente del resto que se realicen.
  • Posibilidad de uso de caché: Se debe tener en cuenta el uso de caché y definir las respuestas como cacheables o no de manera que el cliente no tengan información errónea y a la vez se pueda minimizar el número de peticiones a realizar.
  • Arquitectura por capas: El cliente no debe ser capaz de diferenciar una respuesta servida directamente por el servidor o por un intermediario de modo que por ejemplo se podrán utilizar balanceadores de carga para permitir al servicio escalar.
  • Scripting en el cliente: Se menciona como punto opcional el hecho de que el servidor tenga la capacidad de enviar scripts al cliente para poder extender su funcionalidad.
  • Interfaz uniforme: Es una parte fundamental de REST y define varios puntos.
    • Un recurso debe ser identificable por una petición, es decir la URI del recurso lo identifica y es independiente de la representación del mismo que el servidor nos entregue en la respuesta (que podría ser xml o json como el caso de la API de WordPress).
    • Cuando el cliente obtiene la representación del recurso ésta contiene suficiente información como para poder modificarlo o borrarlo.
    • Cada mensaje tiene suficiente información para describir cómo debe ser manipulado.
    • HATEOAS (Hypermedia as the engine of application state): Tras recibir la representación de un elemento el cliente debe poder descubrir las acciones disponibles y los recursos necesarios a partir de enlaces que el propio servidor proveerá.

Una vez claros los fundamentos vamos a ver de manera muy sencilla cómo podemos utilizar la API que nos ofrece WordPress. Para los ejemplos de este artículo vamos a crear pequeñas aplicaciones en PHP o lanzar peticiones con la herramienta HTTPie por lo que es recomendable tener al menos uno instalado aunque las peticiones se pueden lanzar desde cualquier aplicación que nos lo permita, como curl, Postman, cualquier lenguaje de programación que nos permita hacer peticiones HTTP o nuestro navegador web.

Primeros pasos con la API

Podemos empezar a utilizar la API REST de WordPress simplemente lanzando peticiones HTTP a los endpoints disponibles en /wp-json/wp/v2/ que nos responderán con un objeto JSON. Para algunas opciones eso será suficiente pero en otras necesitaremos autenticarnos. Para empezar podemos lanzar en nuestro terminal el comando http http://localhost/wp-json/wp/v2/posts y veremos como la respuesta contiene el listado de posts de nuestro WordPress.

Empezar a hacer algo útil con la API es tan sencillo como utilizar la respuesta que nos da el servidor, podríamos por ejemplo parsear y listar todos los posts con el título, la fecha y el enlace a la web.

Como hemos mencionado anteriormente para utilizar según qué endpoints es necesario autenticarse. Por defecto se incluye la autenticación con cookies, con este tipo de autenticación una vez hagamos login podremos utilizar la APIdesde la propia página. Este tipo de autenticación es muy útil para desarrollar plugins y temas que desean trabajar con la API.

En nuestras pruebas vamos a simular un sistema algo más complejo, imaginemos que tenemos una aplicación completamente independiente desde la que queremos gestionar nuestra instancia de WordPress, existe un plugin enfocado al desarrollo con la API que nos permite utiliza basic auth, únicamente tendremos que enviar en las peticiones nuestro usuario y contraseña. Es por eso que está enfocado al desarrollo ya que es inseguro, pero existen alternativas como plugins para autenticar con Oauth o JWT que son sistemas listos para producción.

Con el plugin instalado vamos a crear nuestra primera aplicación usando php para comunicarnos con la API usando la autenticación y comprobar que todo funciona correctamente. Para ello vamos a utilizar composer y requeriremos los paquetes guzzlehttp/guzzle y symfony/console. Existe una manera muy sencilla de crear comandos en un único fichero utilizando el componente symfony/console de manera que tendremos todas las ventajas que nos ofrece el paquete sin tener que crear todo un proyecto o utilizar el framework completo. Para la comunicación con la API utilizaremos guzzle que nos simplifica el uso de HTTP.

Así pues utilizando el endpoint /wp-json/wp/v2/users/me podemos crear una pequeña aplicación que nos confirme nuestra identidad de manera que sabremos que la comunicación con la API está siendo exitosa. El siguiente código ilustra cómo realizar la petición GET HTTP al endpoint para leer los datos de la respuesta.

Al ejecutar el comando desde nuestro terminal con php whoami.php obtendremos una salida similar a la siguiente:

Una vez hemos comprobado que todo funciona bien podríamos extraer una lista con los posts más recientes, para ello podemos sacar partido de los parámetros que nos permite enviar la API para modificar la respuesta. Haremos una petición GET a /wp-json/wp/v2/posts filtrando los post ya publicados, con 2 resultados por página y la primera página de resultados. Esto sería equivalente a la petición incluyendo el siguiente querystring: /wp-json/wp/v2/posts?status=publish&per_page=2&page=1, a continuación podemos ver el código resultante al enviar la petición con guzzle.

En este caso hemos utilizado el helper table de symfony/console para mostrar los resultados en una tabla de modo que el resultado de ejecutar nuestro comando será algo parecido a lo siguiente:

Hasta ahora hemos visto de qué manera podemos obtener información desde la API sea necesaria o no la autenticación, en el siguiente ejemplo vamos a crear un post enviando una petición POST con el título y el cuerpo de la publicación, si no incluimos estado WordPress por defecto lo dejará como borrador. Como podemos ver a continuación el código para automatizar la creación de artículos es muy sencillo y una vez creado nos notifica del id del post y su título.

Por último vamos a publicar esos post que hemos ido dejando como borradores. Para ello debemos combinar los comandos que hemos creado anteriormente como indica el código que sigue al párrafo. Primero obtendremos los post que estén como borradores utilizando status=draft y posteriormente uno a uno realizaremos peticiones POST a /wp-json/wp/v2/posts/POSTID cambiando el valor de status a publish.

Conclusión

Una de las grandes características de las API REST es su facilidad de uso, como hemos podido ver podemos ejecutar todas las operaciones básicas (incluyendo el borrado pese a no estar ejemplificado podemos consultarlo en la documentación y ver que no alberga ninguna complejidad extra) sobre los recursos de nuestro WordPress con código muy sencillo. Esto nos puede servir tanto para crear herramientas para migraciones como para integraciones en otros sistemas o la creación de herramientas propias que nos ayuden a automatizar nuestras tareas del día a día en la gestión de nuestro WordPress.

Podéis consultar el código completo del proyecto en el gist.
[/et_pb_text]
[/et_pb_column]
[/et_pb_row]
[/et_pb_section]

Por qué desarrollar tu proyecto con Symfony

A la hora de desarrollar un proyecto es muy común preguntarse qué tecnología utilizar así como el hecho de utilizar un CMS (Content Management System) o un plataforma de e-commerce. Ambos se han hecho muy populares en los últimos años debido a que contienen una serie de funcionalidades estándar que luego se pueden adaptar a cada sitio web que se vaya a desarrollar. Como definición, un CMS es un gestor de contenidos, una aplicación ya desarrollada, que está lista para utilizarse y que permite cierto nivel de personalización y modificación.

Por ejemplo, encontramos como principales CMS para desarrollar una web a Worpdress, Joomla o Drupal y como principales sistemas para crear un e-commerce a Prestashop, Magento o WooCommerce. Cuando el proyecto es de un tamaño pequeño-mediano son plataformas ideales, ya que permiten desarrollar el sitio web de una forma muy rápida, ya que viene ya montado prácticamente todo lo necesario para empezar. Un panel de administración, un editor de texto enriquecido, un gestor de imágenes y hasta un gestor de productos, pedidos e incluso CRM dentro de las plataformas e-commerce. En ocasiones, incluso para proyectos más grandes un CMS puede hacer un gran papel.

No obstante, cuando lo que se quiere desarrollar es algo más potente, que sea muy escalable y a medida pero sin tener que reinventar la rueda, la opción adecuada suele ser la utilización de un framework.

¿Qué es un framework?

Un framework es un conjunto de herramientas y librerías ya desarrolladas y estudiadas que permiten realizar las tareas más comunes dentro del proyecto. Es decir, un framework incluye todas aquellas funcionalidades que suelen tener la mayoría de proyectos ya desarrolladas para que no se tengan que desarrollar de nuevo para cada proyecto. Con esto, el desarrollador gana mucho tiempo, pues mucha parte del desarrollo viene ya preparado. Sin embargo, no hay que confundirlo con los CMS, ya que el framework contiene las funcionalidades, aunque es el desarrollador el que tiene que darle la forma deseada y aplicar y utilizar lo que necesite, de forma totalmente a medida.

Los frameworks, en muchos casos llegan a ser incluso una forma de trabajar y de estructurar el código, esto es, una jerarquía y organización para el proyecto ya predefinida. Algunos de los frameworks para PHP más conocidos son Symfony, Zend Framework, Laravel, CakePHP o CodeIgniter.

¿Por qué Symfony?

Symfony es uno de los frameworks más populares y tiene mucho recorrido, lo cual permite que haya una comunidad importante de desarrolladores. Esto facilita el hecho de que cuando hay que realizar un desarrollo con symfony haya mucha documentación y mucha gente a la que poder preguntarle y compartir.

Este framework funciona sobre PHP y permite con su gran potencia algunas de las siguientes cuestiones:

  • Tener un proyecto bien estructurado y donde pueden trabajar / aportar muchos desarrolladores a la vez. Es decir, el hecho de trabajar con Symfony hace que una vez que una persona ha aprendido symfony luego pueda trabajar en un proyecto nuevo de forma sencilla, ya que conoce perfectamente la estructura y dónde encontrar cada funcionalidad. Incluso y por el mismo motivo, permite que un desarrollador pueda ayudar en un proyecto que ya está en desarrollo.
  • Tener un orden en el proyecto. Es fundamental, ya que cada desarrollador podría trabajar de una forma, y al utilizar un framework todos siguen un mismo orden.
  • Escalabilidad. Trabajar de una forma tan estructurada pero a la vez pudiendo desarrollar a medida, permite una gran escalabilidad. Es una de las principales diferencias a la hora de crear un proyecto con un CMS o con un framework, con este último generalmente se puede crecer todo lo necesario sin necesidad de estar cambiando constantemente todo el motor de la web.
  • No reinventar la rueda. En symfony como en el resto de frameworks es lo que se pretende. No tener que desarrollar cada vez un login de usuarios o un buscador, sino utilizar los que ya vienen, que además son mejorados constantemente por la comunidad, lo que permite tener siempre unas funcionalidades potentes y actualizadas con un esfuerzo menor. Si cada vez se tuviera que desarrollar cada funcionalidad supondría mucho tiempo y dinero, y seguramente el resultado no sería tan bueno.
  • MVC (Modelo-Vista-Controlador). Una forma de trabajar que facilita la vida a los desarrolladores y permite diferenciar entre la parte más de programación y aquella que es más de maquetación, de forma que un equipo de desarrolladores puedan trabajar mejor según su perfil y sin interferir en el trabajo de los demás.
  • Es software libre. El código de symfony es libre y está abierto a todo el mundo. Cualquiera pueda utilizarlo para su proyecto, del mismo modo que puede utilizar PHP. Esto es un gran punto a favor, ya que es algo abierto, en continuo desarrollo y avance y hace que una persona con conocimientos pueda utilizarlo a su servicio e incluso ayudar a los demás desarrolladores a mejorar.

¿Cuándo escoger Symfony?

Se ha hablado de CMS y de frameworks, pero es importante saber cuando elegir cada uno. Elegiremos el framework Symfony generalmente en los siguientes casos:

  • Cuando se necesita flexibilidad. Si en un proyecto se necesita hacer las cosas de una determinada manera y no de otra. Al contrario que los CMS donde las modificaciones están más limitadas en Symfony la programación se puede adaptar de forma total a las necesidades o requisitos del proyecto.
  • Cuando los CMS se quedan cortos. En muchos casos la utilización de un CMS puede limitar las posibilidades del proyecto, por la forma en la que están desarrollados. En symfony se puede complicar el proyecto todo lo deseado, pues permite crecer mucho más.
  • Seguridad. Utilizar symfony frente a un CMS es también un punto a favor de la seguridad, pues la mayoría de los CMS siguen los mismos patrones, mismas URLs para hacer un login y mismos bugs. Esto facilita que cuando hay un error, ese error forme parte de todos los CMS del mercado y haya que estar rápidamente con actualizaciones. En symfony, en cambio, al estar todo desarrollado a medida sobre una base, es más complicado que se puedan difundir este tipo de errores, que serían más concretos para cada proyecto y no tan genéricos.
  • Mejor gestión de recursos. Aunque los frameworks suelen necesitar bastantes recursos, es posible «jugar» con ello, al contrario de lo que ocurre con los CMS, donde la propia estructura de los mismos hace en ocasiones que no se puedan optimizar de todo.
  • Utilización de plantillas y layouts. Pese a que symfony tiene una curva de aprendizaje mayor a la de los CMS, tiene un sistema de plantillas y layouts que permiten que diseñadores o maquetadores HTML puedan aportar al proyecto sin tener demasiada idea del mismo.

 

Agencia desarrollo Symfony

Por todos estos motivos es importante plantearse antes de desarrollar un proyecto qué es lo que más conviene y en el caso de optar por un framework como symfony, rodearse de un equipo de profesionales para poder llevar el proyecto a cabo. Es indispensable trabajar con un desarrollador o agencia de desarrollo Symfony para conseguir desarrollar un sitio web más ambicioso o una aplicación web.

En resumen, se utilizará un CMS cuando sea un sitio web más o menos sencillo o se pueda cubrir de forma rápida por las funcionalidades con las que estos cuentan. Como por ejemplo una web o una tienda online al uso. Y se utilizará el framework symfony cuando desarrollo sea más complejo o se necesite un sitio web más potente y escalable.

¿Tienes alguna incidencia?

Cuéntanos qué ocurre
y nos pondremos con ello lo antes posible.

Este sitio está protegido por reCAPTCHA, y la Política de privacidad y Términos de servicio de Google.
Sucríbete a
nuestra newsletter

para estar al día en el mundo online

¡Cuéntanos tus ideas!
+34 96 653 19 14
+info@acceseo.com
He leído y acepto la política de privacidad

Este sitio está protegido por reCAPTCHA, y la Política de privacidad y Términos de servicio de Google.