Drupal 8: Creando un recurso REST personalizado con un método DELETE

Cabecera de Drupal 8: Creando un recurso REST personalizado con un método DELETE

Drupal 8: Creando un recurso REST personalizado con un método DELETE

  • Autor: fjavimartin

  • Fecha de Creación: 03/06/2019

  • Categorías:

    • Drupal,
    • Drupal 8,
    • Php,
    • Code snippets,
    • Rest,
    • Webservice,
    • Json

El objetivo de este artículo será la creación de un endpoint que escuchará solicitudes DELETE y que nos permitirá eliminar objetos dentro de drupal.

1. Añadir ruta al routing.yml

El primer paso será añadir nuestra ruta al fichero routing.yml de nuestro módulo.

drupal_miseries.customrestdelete:
  path: '/drupal_miseries/rest/customrestdelete'
  defaults:
    _controller: '\Drupal\drupal_miseries\Rest\CustomRest::deleteNode'
  methods: [DELETE]
  requirements:
    _access: 'TRUE'

No tiene mucho misterio, damos de alta la ruta en la que atenderá nuestro endpoint especificando cuál será el controlador que atenderá la petición y el método autorizado.

2. Alta del método deleteNode en el controlador

Pasamos a mostrar el código del método encargado de gestionar las solicitudes del endpoint:

/**
   * Delete node.
   * @param Request $request
   * @return \Symfony\Component\HttpFoundation\JsonResponse
   */
  public function deleteNode(Request $request) {
    $storage = $this->entityTypeManager->getStorage('node');
    
    // Get data value from request
    $data = $request->request->get('data');
    
    // Transform json from request to associative array
    $values = json_decode($data, TRUE);
    
    // Try to load node
    $node = $storage->load($values['nid']);
    
    if (!empty($node)) {
      // Delete node.
      $node->delete();
      
      //Create response with OK message
      $response = new JsonResponse([
        'response' => 'Node deleted.'
      ]);
    } else {
      $response = new JsonResponse([
        'response' => 'Node not exists.',
      ], 404);
    }
    
    return $response;
  }

Este código realizará las siguientes funciones:

  • Capturamos de la solicitud http el json con el parámetro que contendrá el identificador del nodo que queremos borrar.

  • Con el identificador obtenido en el paso anterior intentamos cargar el nodo correspondiente. Para el caso en el que la respuesta sea un array vacío no habremos podido localizar el nodo y devolveremos un mensaje informando que el recurso no existe, en caso contrario eliminaremos el nodo y devolveremos un mensaje informando de su eliminación.

3. Probando nuestro endpoint

Como en anteriores ocasiones, utilizaremos Postman para generar la solicitud http para probar nuestro endpoint:

DELETE /drupal8/drupal_miseries/rest/customrestdelete HTTP/1.1
Host: mihost
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: 4b5f7734-790a-c644-2a98-70a154db7557

data=%7B%0A++%22nid%22%3A+194%0A%7D

Dentro de data encontramos codificado el json con el id del elemento a borrar:

{
"nid": 194
}

Para el caso en el que no hayamos encontrado ningún elemento con ese código obtendremos un mensaje como el siguiente:

{
    "response": "Node not exists."
}

Para el caso en el que hayamos encontrado un nodo con ese identificador:

{
    "response": "Node deleted."
}

4. Conclusiones

Con este artículo cerramos el ciclo dedicado a las operaciones sobre contenido dentro de un sitio drupal haciendo uso RESTful web services.

Entre las referencias encontraréis el enlace que os llevará hasta el git de drupal donde podréis ver el código completo que he utilizado en esta secuencia de artículos para que, si lo deseáis, podáis descargarlo y utilizarlo como queráis.

Espero que os hayan gustado, no dudéis en hacer cualquier aporte en los comentarios y como siemrpe…….Disfrutar!!!!!

Referencias

https://www.e-quipos.es/blog/drupal-8-creando-un-recurso-rest-personalizado-con-un-m%C3%A9todo-get

https://www.e-quipos.es/blog/drupal-8-creando-un-recurso-rest-personalizado-con-un-metodo-post

https://www.e-quipos.es/blog/drupal-8-creando-un-recurso-rest-personalizado-con-un-metodo-patch

https://www.getpostman.com/

https://jsoneditoronline.org/

https://symfony.com/doc/current/introduction/http_fundamentals.html

https://symfony.com/doc/current/components/http_foundation.html

https://www.drupal.org/docs/8/core/modules/rest/5-delete-for-deleting-content-entities

https://git.drupalcode.org/sandbox/javier.martin-2911003/tree/develop/drupal_miseries

 

Todos los Derechos Reservados © 2016

Funciona con Drupal