RESTfull API en Drupal con Services

13/11/2014
RESTfull API en Drupal con Services

Configuración de una API RESTfull en Drupal

Con el aumento de las tecnologías móviles cada día es más necesario utilizar modelos de programación orientados a los servicios. Es ya bastante común que un mismo proyecto requiera de una interfaz para tablets y móviles, otra para web e incluso una para escritorio. Este tipo de proyectos implica casi directamente la creación de una API REST con la que poder interactuar desde las distintas interfaces de usuario.

Una API REST es una interfaz de comunicación basada en el protocolo HTTP que permite a los desarrolladores consultar, crear, editar y eliminar recursos a través de URLs. 

¿Y se puede hacer esto con Drupal? Pues claro que si! :)
Mediante la combinación del módulo Services y Views es posible crear una API REST en pocos pasos y este post va a tratar sobre el tema.

Instalación de Services

Para instalar Services es necesario descargar los siguientes módulos:

Una vez descargados hay que habilitar los siguientes:

  • REST Server
  • Services
  • Chaos tools
  • Libraries

El método más cómodo para realizar los dos pasos anteriores es hacer uso de la herramienta Drush y en la línea de comandos escribir las siguientes dos líneas:

drush dl services ctools rest_server libraries
drush en services ctools rest_server libraries -y

Configuración de Services

Una vez instalados, en la sección de estructuras, aparecerá una nueva subsección llamada servicios. Accediendo a ella se llegará a la página de creación de servicios

  • /admin/structure/services 

Pantalla servicios default_1.png

Para crear el endpoint hay que hacer clic en Agregar

pantalla servicios rellena.png

En esta pantalla aparecen los 4 primeros campos a tener en cuenta:

  • Machine-readable name of the endpoint: es el nombre interno que tendrá nuestro endpoint
  • Servidor: Servidor que manejará las peticiones del endpoint
  • Path to endpoint: dirección del endpoint.

Con la siguiente configuración se ha creado una URL con la que mediante peticiones HTTP se interactuará con el servicio REST. En este ejemplo /rest

El siguiente paso es configurar que recursos queremos hacer accesibles desde esa URL. Para ello hay que hacer clic en ‘Editar Recursos’

En este ejemplo con seleccionar las opciones CRUD de ‘node’ ya es suficiente.

Sencillo ¿verdad? Pues con estos simples pasos ya está funcionando un servicio REST que nos permite consultar, crear, modificar y eliminar un nodo.

Para probarlo basta con acceder a las siguientes url:

  • /rest/node  XML con un listado de nodos
  • /rest/node.json lo mismo pero en formato JSON
  • /rest/node/1 XML con la información del nodo con ID igual a 1
  • /rest/node?parameters[type]=article&parameters[promote]=1 XML con un listado de nodos de tipo ‘article’ y promote = 1.

 

 

Por defecto la salida será un XML. Sin embargo hasta ahora la mayoría de las proyectos en los que he trabajado el formato utilizado era JSON.  Se puede cambiar el formato en la propia URL añadiendo la extensión deseada (/rest/node.json) no obstante es una opción que el mismo standard REST no recomienda.

Para hacer que por defecto la salida sea en json sin necesidad de añadir la extensión hay que cambiar la configuración del servidor REST. De nuevo hay que acceder a la página de administración de los servicios (/admin/structure/services) y como se muestra en la siguiente imagen hacer clic sobre el enlace ‘editar Servidor’.

Una vez dentro, en el apartado de configuración del formato de salida, seleccionar sólo la opción JSON.


Llegado a este punto y para finalizar me gustaría mencionar otro módulo de drupal que tiene una funcionalidad muy similar a la combinación de Service y REST Server . Se trata de ‘RESTful Web Services’ y también permite hacer CRUD sobre todos sobre las entidades de drupal. ¿Y por qué no he elegido este otro para escribir el post? La respuesta es porque Services también se puede integrar de forma muy sencilla con Views para permitir búsquedas con parámetros y de esto tratará mi siguiente post.