Habilitando servicios Web en Drupal 8

Logo REST Drupal 8

Drupal 8 pone mucho énfasis en arquitecturas desacopladas, este tipo de arquitecturas siguen el paradigma: "Crea una vez, publica en cualquier lugar", es decir, buscan que creemos un contenido una sola vez en nuestro gestor de contenido pero que podamos utilizarlo en cualquier dispositivo/formato/cliente sin necesidad de crear otro contenido para cada canal.

Pero... ¿Qué es REST?

Para asegurarnos de que todos hablamos de lo mismo. Digamos que los servicios web permiten que otras aplicaciones interactúen con nuestro servidor de contenido de forma más adecuada que un navegador web, este tipo de interacciones, cumplen sobre los datos suelen ser de tipo CRUD (crear, consultar, actualizar, borrar).

REST es uno de las formas más comunes de servicios web, hay otros formatos como SOAP o XML-RPC, nos centraremos en REST al ser el formato más utilizado y el estándar en Drupal. REST utiliza los métodos HTTP (GET, POST, PATCH, PUT y DELETE).

Este tipo de servicios se utilizan para mostrar contenidos en otros portales o interactuar con otras aplicaciones, tales como aplicaciones para móviles.

RESTful en Drupal.

Drupal incluye en el core los módulos necesarios para publicar los contenidos del gestor de contenidos en formato REST:

RESTful Web Services (rest)

Expone las entidades de drupal y otros recursos (como vistas) mediante un API web RESTful. Utiliza el módulo Serialization para serializar el contenido que se envía a través del API.

Serialization (serialización)

Como hemos dicho, se encarga de serializar, es decir, codificar los datos de forma que se puedan transmitir de forma más eficiente, los formatos más utilizados incluyen JSON y XML.

Hypertext Application Language (hal)

Mejora el módulo de serialización proporcionando el formato HAL. Este formato añade dos palabras reservadas '_links' para las relaciones y '_embedded' para los recursos embebidos. Puede ofrecerse tanto en formato JSON como XML.

HTTP Basic Authentication (basic_auth)

Este módulo se utiliza para proporcionar un mecanismo de autenticación HTTP Básico, hay módulos que proporcionan métodos más seguros, pero en estos ejemplos crearemos servicios que se podrán usar como usuario anónimo, por lo que no necesitaremos implementar mecanismos de autenticación por ahora.

REST UI

Este módulo no está incluido en el core, pero es imprescindible para realizar la configuración en el interfaz de administración al proporcionar elementos de interfaz para gestionar los servicios REST.

Comenzamos:

Lo primero que hay que hacer es activar los módulos, podemos hacer los drush o mediante el UI de administración:

Modulos activados para RESTful

Con los módulos activados podremos activar los servicios en administración (admin/config):

Apartado de configuracion

Dentro de REST, podemos elegir qué entidades y elementos de Drupal queremos exponer como servicios web y los detalles de cómo y de qué forma queremos hacerlo, vamos a exponer el contenido, en formatos JSON y HAL_JSON, solo para GET y vamos a utilizar como método de autenticación Cookies:

Configuración de contenido REST

Una vez hecho esto, ya tenemos un endpoint adicional para nuestro contenido, podemos solicitar el contenido en formato html como venimos haciendo hasta ahora con el navegador, o podemos solicitar el contenido de cualquier nodo mediante el endpoint de REST: https://praderas.org/node/1?_format=json

Respuesta a peticion REST

Igual que podemos publicar el contenido REST, podemos publicar el resultado de vistas, al activar Servicios tenemos disponible una nueva Presentación en las vistas, además de poder crear bloques o páginas podremos crear exportaciones REST a raíz de nuestras vistas.

Vamos a crear una vista que nos sirva para listar todo el contenido de la web en formato REST, ya que la utilizaremos para nuestra pequeña web móvil, la vista la creamos normalmente, como cualquier otra vista, pero eligiendo la presentación de exportación REST.

En las exportaciones REST podemos exponer la entidad al completo o solamente una serie de campos de nuestra elección, para el caso de la exportación de la vista que queremos hacer, es suficiente con exportar una serie de campos, no es necesario mostrar toda la entidad.

En el caso que nos ocupa, mientras que estemos desarrollando, es recomendable deshabilitar la cache de la vista pues cualquier resultado incorrecto puede quedarse cacheado y volvernos locos si no caemos en que se trata de un resultado en cache.

Con todo esto, nuestra vista quedaría así:

Vista de exportación REST

Podemos comprobar con cualquier herramienta que nuestro endpoint responde con los datos deseados:

Respuesta de exportacion REST

Con esto, ya tenemos expuestos los nodos con un servicio REST y exportación en formato JSON y HAL_JSON y tenemos una vista que nos va a devolver como exportación REST un listado con todos los contenidos del sitio.

En nuestro próximo artículo utilizaremos esta vista y la exportación de nodos para hacer una pequeña versión móvil del sitio con jquery mobile.

Siguiente artículo:

Pequeña Versión Móvil con Jquery Mobile.

Tags