Rest Services en Drupal 9 (Parte 1)

Video de Youtube
URL de Video remoto
Texto

Si no ves el video, puedes refrescar el navegador, presionando (Ctrl+Shift+R | Ctrl+F5 o Shift+F5), o abrirlo directamente desde el Canal de Youtube... HAZ CLIC AQUI

      Siguiendo con las opciones disponibles para combinar, el uso de Drupal como Backend, con librerías JavaScript del tipo Vue.js o Angular, para el Frontend; hoy abordaré los principios básicos sobre recursos Rest en Drupal 9, para que puedas comenzar a experimentar.

     A partir de su versión 8, se añadieron varios módulos en el núcleo de Drupal, con el fin de facilitarnos la activación de los más utilizados, como es el caso de los servicios web, ya que es cada vez más frecuente, encontrarnos con proyectos, que requieren conectar un sistema robusto de gestión como ofrece Drupal, con aplicaciones para móviles o simplemente, para añadir una presentación de contenidos más flexible, atractiva y amigable de cara a los usuarios finales.

     Con el módulo Rest entre otras opciones, podremos generar, de forma sencilla, todo tipo de contenidos e información en formato Json o XML, además de configurar accesos, para la gestión de usuarios y contenidos a través del uso de APIs, desde prácticamente cualquier tipo de aplicación disponible.

Requisitos:

     - Tener una web Drupal en funcionamiento, con varios contenidos preferiblemente con taxonomías, imágenes, textos y usuarios creados, para que puedas realizar diferentes pruebas.

     Si no tienes contenidos, o prefieres generar contenido de prueba, para realizar tus configuraciones, puedes utilizar el módulo Devel Generate, integrado en el módulo Devel, con el cual podrás generar todo el contenido que necesites basándote en los tipos de contenido que prefieras, haciendo únicamente un par de clics.

     Aquí tienes la explicación de Cómo generar contenidos de Prueba con el módulo Devel

     - Descargar y activar el módulo Rest UI, para facilitar la gestión de los endpoints y accesos utilizando la interfaz de Drupal. Aunque en la página oficial de módulo sólo especifica que es compatible para la versión 8, si lo descargas usando Composer podrás utilizarlo en tu Drupal 9.

Cómo trabajar con Rest en Drupal 9  

     Paso 1 Activación de módulos RESTfull Web Services y Serialization:

          Con la activación y combinación de estos módulos, incluidos en el núcleo de Drupal, a partir de la versión 8, podremos, entre otras cosas, crear nuevas vistas, que nos mostrarán el contenido en formato Json o también podremos añadir vistas de este tipo a otras ya existentes.

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

          Además de esto módulos, antes de continuar, aprovecharemos para descargar y activar el módulo REST UI que mencionamos en los requisitos, para realizar configuraciones relacionadas con REST, a través de la interfaz de usuario de Drupal.

     Paso 2 Descarga y activación del módulo REST UI:

          Descarga y Activación REST UI:

               Para descargar y activar cualquier módulo de Drupal tienes varias opciones:

     Descarga:

          1.- La forma recomendada a partir de Drupal 8, es utilizando el gestor de paquetes Composer, ejecutando en tu consola el comando:

composer require drupal/restui

 

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

          2.- Descargándolo manualmente el módulo desde la página oficial del Módulo Rest UI  y una vez descargado y colocado en carpeta "modules/contrib", si haz descargado todos tus módulos manualmente, deberías crear la carpeta "contrib", para que puedas diferenciar entre tus módulos personalizados y los que están disponibles directamente en la Página oficial de Drupal.

     Activación:

          1.- Utilizando la herramienta de consola Drush, la opción "-y" activará todos los sub-modulos automáticamente.

drush en restui -y

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

          2.- Desde la interfaz de usuario de Drupal, en la url "/admin/modules", y luego marcando el check junto al nombre de tu módulo y haciendo clic en el botón guardar que aparecer al final de la página.

     Paso 3 Creación y configuración de una vista en formato Json:

          La primera novedad que podremos comprobar, una vez activados los módulos RESTful Web Services y Serialization, es que si nos vamos a la pantalla para la creación de vistas, en la url "/admin/structure/views/add" y seleccionamos Agregar vista, podremos ver en la parte inferior una nueva opción, llamada Configuración de exportación REST.

         Si seleccionamos esta opción, nos creará una vista en la que podremos mostrar los datos en formato json o xml.

 

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Vamos a comenzar con la creación de una vista tipo REST, en la que mostraremos el listado de artículos, para este ejercicio puedes utilizar el módulo Devel Generate, para crear contenidos de prueba con un par de clics, o si lo prefieres, crear algunos artículos manualmente.

     Una vez tengas los artículos que vas a mostrar en tu vista, puedes aplicar la misma configuración que te muestro en la siguiente imagen, con estas opciones seleccionadas, haremos clic en el botón Guardar y editar, para que se nos abra la pantalla de configuración donde terminaremos de realizar los ajustes necesarios para obtener nuestro objetivo.

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Una vez que estemos dentro de la pantalla de configuración de nuestra vista, el primer cambio que deberíamos realizar es modificar la configuración para que el contenido de la vista se muestre en formato json.

     Para ello, primero haremos clic en configuración, dentro del apartado FORMATO, tal y como te muestro en pantalla:

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     A continuación, para este ejercicio, seleccionaremos el formato json y una vez hayamos aplicado el cambio, inmediatamente podremos ver cómo se muestran nuestros artículos en formato json, dentro de nuestra v

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Para este ejemplo hemos creado un sólo artículo, pero nuestra vista muestra un montón de información, debido a que en el FORMATO, está marcada la opción de Mostrar: Entidad, lo que significa que mostrará mucho más de lo que necesitaríamos para realizar consultas y conexión con alguna aplicación.

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Una consulta como esta consumiría una gran cantidad de recursos para su ejecución, por lo que se verían afectados el tiempo de respuesta y por lo tanto el resultado final de nuestro desarrollo.

     Para evitar que Drupal nos devuelva información innecesaria por ahora, cambiaremos la opción del Formato, para obtener sólo algunos campos, en lugar de toda la entidad; para nuestro ejemplo, seleccionaremos el título, el autor y la fecha de creación. 

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Una vez añadidos los campos, el resultado final es un listado mucho más sencillo y fácil de leer y manipular:

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Paso 4 Comprobación de la vista en el navegador:

          Para comprobar que nuestra vista en formato Json funciona correctamente, tendremos que acceder con la url que hemos configurado al crearla y el resultado debería ser el mismo que hemos visto en la pantalla de configuración, en mi caso he añadido la extensión de Chorme llamada JSON Viewer:

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Cómo mostrar contenidos de Drupal, en formato json, sin tener que configurar una vista

           Ya conocemos la manera de generar vistas para obtener resultados en formato Json, pero además, podremos acceder directamente a un contenido en concreto, también en formato json, añadiendo a la url de nuestra web, las especificaciones del formato requerido. 

          Por ejemplo, podremos acceder a nuestro artículo 1, o node/1 para que se nos muestre en formato json, añadiendo al final de la url las especificaciones del formato.

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

          En nuestro caso, sería algo como esto http://drupal9.localhost/node/1?_format=json, si hacemos la prueba en el navegador nos devolverá algo parecido a la siguiente imagen:

 

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

          Si hemos obtenido este resultado, es debido a que todavía nos falta indicarle a Drupal, que nos permita acceder de esta forma. Para lograrlo tendremos que habilitar los recursos utilizando el módulo REST UI, Así que nos iremos a la url "/admin/config/services/rest" y dentro buscaremos y activaremos el recurso que nos permita acceder a los contenidos utilizando get, tal y como te muestro a continuación:

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Tan pronto como realicemos estos cambios, si volvemos a nuestro navegador y refrescamos, veremos un contenido similar al que mostrábamos en la vista.

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Cómo acceder a vistas ya existentes para que se muestren en formato Json

          Al igual que hemos hecho para acceder a los datos de un nodo, podríamos intentar realizar la misma operación llamando a una vista existente. Por ejemplo, a partir de Drupal 8, en el listado de las vistas, podremos encontrar una llamada frontpage, que nos muestra por defecto todos los contenidos que hayamos creado, sino hemos realizado ninguna otra configuración, para que se muestre otro tipo de página como inicio de nuestra web.

          Cómo vemos en la imagen, la url para esta vista frontpage es /node, por lo tanto, si queremos que nos devuelva sus contenidos en formato json, tendremos que añadir un modo de vista REST, desde la pantalla de configuración, luego le asignaremos una url, por ejemplo /node/rest y realizaremos los mismos cambios del formato que efectuamos en el primer ejemplo de este artículo.

 

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

          Cuando hayamos terminado la configuración de nuestra nueva vista, a la que accederemos por la url "node/rest", tendremos que habilitar el recurso, antes de poder escribir en el navegador "http://drupal9.localhost/node/rest?_format=json", ya que si lo hacemos, sin habilitar el recurso, nos devolverá un error al igual que nos sucedió al intentarlo con el nodo.

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Por lo tanto, si escribimos en el navegador las mismas especificaciones de formato que aplicamos, para acceder al node/1, deberíamos obtener la vista de nuestra página principal en formato Json.

     Pero, como habrás imaginado, al igual que hicimos con el recurso para acceder al nodo, tendremos que activar otro recurso para lograr este nuevo objetivo.

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Ahora que ya sabes cómo habilitar los recursos del módulo REST UI, para acceder a los contenidos, y obtener resultados en formato JSON, si escribes en el navegador, la url para mostrar tu vista "node/rest", con el formato especificado, entonces deberías ver algo parecido a la imagen siguiente, que será equivalente al contenido y campos que hayas configurado en tu vista.

     En este segundo ejemplo con vistas, he añadido el campo título y el campo body.

Rest Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony