Creando un REST API con Drupal Services

June 18, 2021

Tags: IT Staff ES 2024
Share

Table of contents

Quick Access

api

 

En muchos escenarios, es necesario intercambiar información entre aplicaciones mediante el uso de un API, lo cual por lo general requiere un esfuerzo considerable de desarrollo. Este objetivo puede lograrse fácilmente con el uso del módulo Services para Drupal.

 

Módulo Services

El módulo Services ofrece, por defecto, un conjunto de endpoints para varias entidades de Drupal, como:

  • Comentarios: /comment
  • Archivos: /file
  • Nodos: /node
  • Taxonomías: /taxonomy_term y /taxonomy_vocabulary
  • Usuarios: /user

 

Además, el módulo permite extender estos endpoints con hooks, como hook_services_resources, para agregar nuevas rutas.

 

Instalación

Para instalar Services, sigue estos pasos:

  1. Descarga el módulo desde Drupal Services.
  2. Instálalo en tu carpeta de módulos, que puede ser sites/all/modules o sites/all/modules/contrib.

 

Una vez descargado e instalado, habilita el módulo Services y REST Server desde la interfaz administrativa de Drupal.

 

Instalación con Drush

Si prefieres usar Drush, puedes simplificar el proceso con los siguientes comandos:

 
drush dl services drush en services drush en rest_server 

 

Configuración

Servidores y REST Server

El módulo Services trabaja con el concepto de servidores. Por defecto, incluye un servidor llamado REST Server, que es el que usaremos en este caso.

  1. Ve a Estructura > Services y crea un nuevo servicio.
    • Machine Name: Asigna un nombre a tu servicio.
    • Server: Selecciona REST Server.
    • Path to endpoint: Define la ruta al servicio.
  2. Para editar el servicio, ve a Estructura > Services y haz clic en Editar recursos.

    En esta sección, habilita los recursos que deseas usar. Por ejemplo, para probar con node, habilita index y retrieve.

Configuración de los recursos

 

Formatos de respuesta

En la pestaña de SERVER, puedes configurar los formatos aceptados y de respuesta. Las opciones disponibles son:

  • Bencode
  • JSON
  • JSONP
  • PHP
  • XML

 

Probando el API

Para asegurarte de que todo está funcionando correctamente, puedes hacer una solicitud de prueba al servicio test a la URL http://localhost/test. Esta debería devolver el mensaje:

"Services Endpoint 'test' has been setup successfully."

 

Endpoint de Node: Index

Ya deberías poder obtener la lista de nodos mediante el endpoint test/node. Si quieres especificar el formato de la respuesta, simplemente agrega la extensión correspondiente, como en:

 
test/node.json 

Usando formato JSON

 

Endpoint de Node: Retrieve

También es posible obtener un nodo específico usando el endpoint test/node/id.

Obteniendo un nodo específico

 

Seguridad

El módulo Services permite implementar autenticación básica o autenticación OAuth. En este caso, vamos a configurar la autenticación básica.

 

Habilitar la autenticación básica

  1. Descarga y habilita el módulo services_basic_auth.

    Instalar módulo de autenticación

  2. En la configuración de tu servicio, ve a la pestaña de EDIT y marca la opción HTTP basic authentication.

    Activar autenticación en el servicio

 

Autenticación básica

Una vez habilitada la autenticación básica, cuando un usuario haga una solicitud, el usuario de Drupal correspondiente se cargará y podrá ejecutar acciones que requieran permisos específicos.

 

Generar el token de autenticación

Para autenticarse, debes agregar el header Authorization: Basic {token}. El token se genera codificando 'username:password' en base64.

Por ejemplo, si el usuario es test y la contraseña es passw0rd, el token será:

 
$token = base64_encode('admin:passw0rd')  # token = YWRtaW46cGFzc3cwcmQ= 

 

El header será:

 
Authorization: Basic YWRtaW46cGFzc3cwcmQ= 

 

Probando la autenticación

Petición sin autenticar

Si realizas una solicitud sin autenticar, el sistema devolverá un error, como se muestra en la imagen:

Petición sin autenticar

 

Petición autenticada

Si realizas la misma solicitud pero autenticado, se devolverá la respuesta esperada.

Petición autenticada

 

Con estos pasos, has creado y configurado un API REST utilizando el módulo Services en Drupal, habilitado autenticación básica, y probado su funcionalidad.

 

Te recomendamos este video