
Drupal 8: Creando un recurso REST personalizado con un método DELETE
Autor: fjavimartin
Fecha de Creación: 03/06/2019
Categorías:
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://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