---
url: 'https://metadrop.net/es/articulos/crear-una-api-en-drupal-7-con-el-modulo-restful'
title: 'Crear una API en Drupal 7 con el módulo RESTful'
author: 'Omar Lopesino'
date: '2017-05-01T09:11:46+00:00'
updated: '2026-06-10T07:32:12+00:00'
type: article
summary: 'Mediante RESTful y Drupal podremos crear una API con la información de nuestro sitio para que puedan utilizarla aplicaciones externas.'
tags:
  - 'Drupal 7'
  - 'REST API'
  - 'Content types'
published: true
og:
  determiner: Automatic
  site_name: Metadrop
  'image:alt': 'Crear una API en Drupal 7 con el módulo RESTful'
  street_address: 'Calle Manuel Luna, 12, 3 Dcha'
  locality: Madrid
  region: Madrid
  postal_code: '28020'
  country_name: España
  email: hola@metadrop.net
  phone_number: '910053180'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      '@type': Article
      '@id': 'https://metadrop.net/es/articulos/crear-una-api-en-drupal-7-con-el-modulo-restful#article'
      name: 'Crear una API en Drupal 7 con el módulo RESTful'
      headline: 'Crear una API en Drupal 7 con el módulo RESTful'
      description: "Mediante RESTful\_y Drupal podremos crear una API con la información de nuestro sitio para que puedan utilizarla aplicaciones externas."
      about:
        - 'Drupal 7'
        - 'REST API'
        - 'Tipos de contenido'
      datePublished: '2017-08-10T10:11:46+0200'
      dateModified: '2026-06-10T09:32:12+0200'
      author:
        '@type': Person
        name: 'Omar Lopesino'
      publisher:
        '@type': Organization
        '@id': 'https://metadrop.net/#organization'
      mainEntityOfPage: 'https://metadrop.net/es/articulos/crear-una-api-en-drupal-7-con-el-modulo-restful'
    -
      '@type': Organization
      '@id': 'https://metadrop.net/#organization'
      url: 'https://metadrop.net/'
      name: Metadrop
      sameAs:
        - 'https://www.drupal.org/metadrop'
        - 'https://twitter.com/metadrop'
        - 'https://asociaciondrupal.es/partner/metadrop'
        - 'https://www.linkedin.com/company/metadrop'
      logo:
        '@type': ImageObject
        url: 'https://metadrop.net/themes/custom/mdrop_radix/logo-metadrop-500-500.jpg'
        width: '500'
        height: '500'
    -
      '@type': ItemPage
      '@id': 'https://metadrop.net/es/articulos/crear-una-api-en-drupal-7-con-el-modulo-restful'
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Inicio
            item: 'https://metadrop.net/es'
          -
            '@type': ListItem
            position: 2
            name: 'Artículos expertos sobre Drupal y tecnología'
            item: 'https://metadrop.net/es/articulos'
      publisher:
        '@type': Organization
        '@id': 'https://metadrop.net/#organization'
---
 1. [Artículos](https://metadrop.net/es/articulos)
 
  

# Crear una API en Drupal 7 con el módulo RESTful

Jueves 10 de Agosto de 2017

 

 



Mediante RESTful y Drupal podremos crear una API con la información de nuestro sitio para que puedan utilizarla aplicaciones externas.



   



Vamos a ver cómo podemos crear una API en Drupal con el módulo [RESTful](https://www.drupal.org/project/restful), usando la versión 2.x.

El módulo RESTful tiene las siguientes ventajas respecto a otros módulos que también permiten crear servicios:

- **Versiones**: cada endpoint que creemos puede tener diferentes versiones y coexistir con las anteriores. Esto facilita el mantenimiento a la hora de tener que hacer cambios y no provocar problemas de compatibilidad con los usuarios de la API.
- **API** para manejo de entidades.
- El código del módulo está **muy orientado a objetos**. Además, utiliza el módulo [Plug](https://www.drupal.org/project/plug) para crear cada servicio, por lo que el código será más sencillo de mantener.

Como ejemplo crearemos un servicio que liste los nodos de tipo página de nuestra web.

Para empezar, necesitaremos instalar RESTful en nuestro Drupal. Hay que tener en cuenta que la versión de PHP mínima para tener RESTful es la 5.5.9.

En el módulo donde vayamos a codificar el servicio debemos añadir estas líneas en el .info:

```plaintext
...
registry_autoload[] = PSR-4

```

De esta forma diremos que queremos autocargar clases con [PSR-4](https://www.php-fig.org/psr/psr-4/).

Ahora, empezaremos con la clase que represente al servicio. Debemos crearla en una carpeta que se llame *src/Plugin/resource* , ya que es la que establece RESTful para declarar los servicios REST.

**src/Plugin/resource/Page\_\_1\_0.php**

```php
<?php

namespace Drupal\my_module\Plugin\resource;

use Drupal\restful\Plugin\resource\ResourceNode;

/**
 * Class Page__1_0.
 *
 * @Resource(
 *   name = "page:1.0",
 *   resource = "page",
 *   label = "Page",
 *   description = "Node page endpoint.",
 *   authenticationTypes = {
 *     "cookie"
 *   },
 *   dataProvider = {
 *     "entityType": "node",
 *     "bundles": {
 *       "page"
 *     },
 *     "idField": "id"
 *   },
 *   authenticationOptional = TRUE,
 *   majorVersion = 1,
 *   minorVersion = 0,
 * )
 */
class Page__1_0 extends ResourceNode {

  /**
   * {@inheritdoc}
   */
  public function publicFields() {
    $fields = parent::publicFields();
    $fields['body'] = array(
      'property' => 'body',
      'sub_property' => 'value',
    );
    return $fields;
  }
}
```

El archivo acaba en \_\_1\_0 para poder indicar la versión 1.0.

En el código podemos apreciar lo siguiente:

- Extendemos de la clase **ResourceNode**, clase base para crear servicios sobre tipos de contenido.
- Usamos la anotación **@Resource** para indicar que esta clase corresponde a un servicio. Las variables más importantes son: 
    - **resource:** ruta del servicio.
    - **majorVersion**.
    - **minorVersion**.
    - **name**: nombre completo del servicio. Debe seguir este patrón: **resource:majorVersion.minorVersion**.
    - **dataProvider**: aquí indicamos el tipo de entidad que queremos mostrar (nodos) y su tipo (página). Si quisiéramos añadir otro tipo de entidad solo deberíamos cambiar la propiedad **entityType**.
- Con la información de la anotación sabemos que la ruta será **/api/v1.0/page**.
- En la clase sobreescribimos el método **publicFields** el cual nos permite añadir todos los campos que necesitemos en el servicio. Nosotros añadimos el campo **body** (property) y la propiedad **value** (sub\_property) bajo el nombre de **body** (clave del array, podemos poner cualquiera). Todos los campos que queramos los podemos consultar en la gestión de campos del tipo de contenido en concreto. También tendremos otros campos que se añaden por defecto: el título del nodo (**label**), el identificador(**id**) y la ruta al servicio para el nodo en concreto (**self**).

Con esto ya tendremos listo nuestro servicio, en **/api/v1.0/page**. Este servicio también permitirá crear, editar y borrar contenido (si el usuario que lo pide tiene los permisos adecuados).

Si consultamos el servicio desde el mismo navegador veremos lo siguiente.

```json
{
  "data": [
    {
      "id": 1,
      "label": "Example",
      "self": "http://drupal-modules.me/api/v1.0/page/1",
      "body": "<p>Example</p> "
    },
    {
      "id": 2,
      "label": "Example 2",
      "self": "http://drupal-modules.me/api/v1.0/page/2",
      "body": "<p>Example 2</p> "
    }
  ],
  "count": 2,
  "self": {
    "title": "Self",
    "href": "http://drupal-modules.me/api/v1.0/page"
  }
}
```

Tendremos todos nuestros nodos de tipo página recopilados en **data**, con los campos que necesitamos.

La estructura del JSON viene formada de esta forma ya que RESTful ofrece diferentes formatos para la respuesta del servicio, en este caso partimos del formato **Simple JSON**. Si quisiéramos cambiar el formato lo podemos hacer en **Configuración &gt; Servicios web &gt; Restful**, cambiando el campo **Default Formatter**.

Con esto ya tenemos un servicio REST en nuestro Drupal disponible para ser consumido por cualquier aplicación externa.



[Drupal 7](https://metadrop.net/es/articulos?text=Drupal%207)

[REST API](https://metadrop.net/es/articulos?text=REST%20API)

[Tipos de contenido](https://metadrop.net/es/articulos?text=Tipos%20de%20contenido)

 

- Omar Lopesino
    
    Senior Drupal developer
 
[Desarrollo de módulos e integraciones de terceros con Drupal](https://metadrop.net/es/servicios/drupal/integraciones " See Desarrollo de módulos e integraciones de terceros con Drupal")

Metadrop conecta Drupal con tu CRM, ERP, pasarela de pago y stack de marketing — Salesforce, Microsoft Dynamics, TPV virtual de BBVA, Workday y Keepeek — mediante módulos personalizados y APIs seguras y conformes con el RGPD.

 

 Ver más